根据用户在过滤器中选择的交易对手,GAS 应该向该交易对手发送一封电子邮件。如何在 GAS 中获取过滤条件?我无法谷歌如何做到这一点。根据英文源中的信息,这是不可能的。有人可以建议吗?或者,可以在工作表上放置一个公式,该公式将采用过滤行的值,如果它们都相等,则返回一个与过滤条件等效的值。并且这个公式的结果被 GAS 使用。可以使用什么公式?
Sturmer's questions
在工作表上,数据是通过位于表头中的 ARRAYFORMULA 形成的。当我尝试使用 getLastRow() 确定 GAS 中的最后一行时,后者返回工作表上的全部行数。似乎他认为他们已经被填满了。如何处理这些以便可以使用getLastRow()?或者是编写自己的 SLOW 函数来确定最后一行的唯一选择?
实际上问题在主题标题中。我试过这样,但没有奏效:
SpreadsheetApp.openById(OrderSpreadSheet);
所以它在服务器上打开文件,在浏览器中呢?
我正在尝试通过引用从 Crome 扩展中获取页面的 DOM 结构。我使用这段代码:
var doc = document.body;
fetch(order_data['skuhref']).then(function(response) {
response.text().then(function(text) {
doc.textContent = text;
});
});
这个变量 order_data['skuhref'] 包含 url。
该脚本将页面作为 html 文本返回。但是如何以 DOM 的形式获取页面,从而方便地访问必要的元素呢?
从 Chrome 扩展,我转向 JS 到部署为 Web 应用程序的 GAS 脚本。JS请求脚本:
const fetchData = async (scriptURL, data) => {
try {
const response = await fetch(scriptURL, {
mode: 'no-cors',
method: 'POST',
referrer: "",
redirect: 'follow',
body: JSON.stringify(data), // данные м
headers: {
'Content-Type': 'application/json'
}
});
if (response != "") var json = await response.json();
console.log('Успех:', JSON.stringify(json));
}
catch (e){console.log('Ошибка:', e.message)}
console.log('Tect:');
return
}
该请求通过 GAS 脚本,它正确处理它并返回 JSON,如下所示:
function doPost(e){
// обработка
return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}
但是,Chrome 扩展程序没有收到响应正文,在 DevTools=>Network=>Response 选项卡中给出错误“无法加载响应数据”。以下是初始请求和响应:
Request URL: https://script.google.com/macros/s/fycbzwUUktSYViIkE-kEc9-C73ztt6Mm14GTW9tEFezIdt/exec
Request Method: POST
Status Code: 302
Remote Address: 209.85.233.101:443
Referrer Policy: no-referrer-when-downgrade
access-control-allow-origin: *
alt-svc: h3-29=":443"; ma=2592000, h3-27=":443"; ma=2592000, h3-25=":443"; ma=2592000, h3-T050=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000
cache-control: no-cache, no-store, max-age=0, must-revalidate
content-encoding: gzip
content-length: 414
content-security-policy: script-src 'report-sample' 'nonce-OewkPQPEKTjPXx3gSzqVwg' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;object-src 'none';base-uri 'self';report-uri /cspreport
content-type: text/html; charset=UTF-8
date: Sun, 05 Jul 2020 21:47:26 GMT
expires: Mon, 01 Jan 1990 00:00:00 GMT
location: https://script.googleusercontent.com/macros/echo?user_content_key=bRiwWyQk_oa-B99FJ5_g00zqWPRqvIGFcwdKje92QVPMyyktfI_a_dUeDarNaYb-5NdZdY8r5obHevJSniGht8HDZNzK9Gm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnOhtPz9z4I3dzdyyINU3UA0pwpiENh8R4k1UDc5fBUkkDEzr0xNxtlsP-6Y5oFxMMg&lib=MpU1M31wDqWrblgsshTKAbKcDiPyCPu1i
pragma: no-cache
server: GSE
set-cookie: SIDCC=Ai4QfEY-gvacLHt4o10ILj73SwnH7BM-HG6BYn8X7VZLgyA5FqZ9LxvN1lrJi7lc6SNYpwxa1EC; expires=Mon, 05-Jul-2021 21:47:26 GMT; path=/; domain=.google.com; priority=high
status: 302
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
**Request Headers**
:authority: script.google.com
:method: POST
:path: /macros/s/fycbzwUUktSYViIkE-kEc9-C73ztt6Mm14GTW9tEFezIdt/exec
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
content-length: 99
content-type: text/plain;charset=UTF-8
cookie: .....
origin: chrome-extension://gabejmdkdkojddbfifhcceicplhpdkmn
sec-fetch-dest: empty
sec-fetch-mode: no-cors
sec-fetch-site: none
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
x-client-data: CIe2yQEIorbJAQjBtskBCKmdygEI/rzKAQjAvcoBCOfIygEYm77KAQ==
可能是什么问题呢?我已经打了2个星期,我在任何地方都找不到。似乎问题与 CORS 和 302 重定向有关(谷歌从不同的 url 发送响应)。提前致谢!
告诉我,pliz怎么做?我以前使用GET请求,但有时url字符串的长度不够。我试过这样但它不起作用,而且我不明白如何调试 WEB 可执行脚本:
try {
const response = fetch(scripturl, {
method: 'POST',
body: JSON.stringify(data), // данные м
headers: {
'Content-Type': 'application/json'
}
});
const json = response.json();
console.log('Успех:', JSON.stringify(json));
} catch (error) {
console.error('Ошибка:', error);
}
我正在为 chrome 编写一个扩展,它将页面中选定的文本片段放在 Googlesheets 中。在上下文菜单中选择后,我想将用户重定向到 Google 表格,以便他可以看到结果。有这样一个工作的background.js代码(只需要在代码执行后实现到sheet的过渡即可):
function OrderToSupplier(info, tab) {
var sku = info['selectionText']
var orderurl = info['pageUrl']
var url = "https://script.google.com/macros/s/{script ID}/dev?ssId={SSID}&sheetName=1&sku=" + sku + "&orderurl=" + orderurl;
console.log(url)
fetch(url, {mode: 'no-cors'})
.then(function(response) {
console.log(response);
setTimeout(linktoCRM, 10000,response['status'])
})
.catch(function(error) {
console.log('Looks like there was a problem: \n', error);
});
}
试图通过一个函数
function linktoCRM(respovsestatus){
if (respovsestatus == 200) {location.href = 'https://docs.google.com/spreadsheets/d/{SSID}/edit#gid=0'}
}
没有结果。
您需要在 GET 请求中传递一个二维数组。我将数组转换为这样的字符串:
var params = JSON.stringify (SKU_ids_get)
var apiconnection={'url':url,'key':apikey}
var paramstring =''
for(var key in params) { // преобразуем массив параметров в строку
var value=params[key]
paramstring = paramstring + "&" + key + "=" + value
}
paramstring = paramstring.substr(1) // убираем из строки первый знак конкотенации
var url = apiconnection['url']+paramstring+"&key="+apiconnection['key'] //
UrlFetchApp.fetch (url,{muteHttpExceptions: true})- 发誓,一切都在没有数组的情况下工作
这就是 url 参数的结果,它发誓:
http://zapto.org/api/v1/update_sku_list?sku_ids=[["ПЖ214-1"],["ПЖ214-2"],["ПЖ214-4"]]&sku_vendor_info=[["ВХ",11,"Венеция","https://pravt/com/orders/"],[1,0,"",""],[3,0,"",""]]&key=12345
据我了解,数组需要序列化,类似于php serialize。但是如何在 GAS 中做到这一点?
您能否告诉我是否可以调用名称分配给变量的函数?如果是这样,怎么做?
大家好!
页面上有这段代码:
<ul class="c-order__payment payment-details-list"><li class="noneactive">
<label class="noneactive">
<input type="radio" name="payment" rel="" value="4">Наличные (курьеру) </label>
<span class="icon-payment-4"></span>
<span class="rate-payment"></span>
</li><li class="noneactive">
<label class="noneactive">
<input type="radio" name="payment" rel="" value="2">Яндекс.Деньги </label>
<span class="icon-payment-2"></span>
<span class="rate-payment"></span>
</li></ul>
代码是在页面加载后生成的。生成代码后如何以编程方式单击第一个单选按钮?我试过这个,它没有点击:
setTimeout(ClickPayment, 2000);
function ClickPayment() {
$(".rate-payment:first").click();
}
像这样尝试:
setTimeout (ClickPayment, 1000);
function ClickPayment() {
$(".rate-payment:first").closest(".noneactive").find("input[type=radio]").click();
//$(".rate-payment:first").closest(".noneactive").find("input[type=radio]").attr('checked',true);
alert ("test");
}
不点击。我尝试了注释掉的版本,它没有检查。
现在我尝试这样:
$(document).ready(function() {
$('span.deliveryName:first').click();
setTimeout(ClickPayment, 1000);
$("#container").append(
`
<div class="noneactive">div
<input type="radio"/>
<span class="rate-payment">span</span>
</div>
`
);
});
function ClickPayment() {
var item = $(".rate-payment:first").closest(".noneactive").find("input[type=radio]");
console.log("ClickPayment: count =", item.length);
item[0].click();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container"></div>
它就是这样工作的。控制台响应:ClickPayment:count = 1。这是 Item 内部的样子:
r.fn.init(1)
0: input
length: 1
prevObject: r.fn.init [li.noneactive, prevObject: r.fn.init(1)]
__proto__: Object(0)
提前致谢!
有以下项目架构:
form.php- 生成带有表格的页面,表格没有submit,数据通过ajax。db.php- 与数据库一起工作,处理各种棘手的逻辑
在文件db.php中,在执行逻辑期间,应该初始化用户的消息,但不重新加载表单form.php。
怎么做?
如何初始化启动JSc alert?甚至更好bootstrap alert?如何将此JS值作为变量与消息文本一起传递?
以下是部分代码:
<?php
session_start();
header('Content-Type: application/json;charset=utf-8');
require_once("db_connection.php");
require_once("query_lib.php");
echo 'TECT ХХХХХХХХХХХХХХХХХХХ';
$docvalues = json_decode(stripslashes($_POST['formresult']), true);
if(isset($docvalues['docclass'])){ // проверяем устанволен ли тип документа (для корректировки)
$corr_doc_id = $docvalues['fixedItem']['property_fix2'];
$current_doc_fixed_items = serch_corrected_docs ($corr_doc_id, $connection); // получаем последнюю действующую запись документа
if ($current_doc_fixed_items == false) { //если запрос по id документа не нашел документа (или использовался id нового документа, или не найден)
$message = array('message' => 'ID документа не найден, попробуйте его изменить') ;
echo json_encode($message);
return $current_doc_fixed_items;
}