Javascript 对已部署WebApp的Google Apps脚本URL的请求产生404错误
这个问题与这里发布的其他问题(例如)非常相似。这并不完全相同,但我相信这与那篇文章中说明的根本问题是一样的,即在登录到多个Google帐户时尝试向Google应用程序脚本提交表单会导致Javascript 对已部署WebApp的Google Apps脚本URL的请求产生404错误,javascript,jquery,ajax,google-apps-script,Javascript,Jquery,Ajax,Google Apps Script,这个问题与这里发布的其他问题(例如)非常相似。这并不完全相同,但我相信这与那篇文章中说明的根本问题是一样的,即在登录到多个Google帐户时尝试向Google应用程序脚本提交表单会导致/u/1和/或/u/0添加到脚本的URL,从而产生404错误 这是使用标准的谷歌账户,而不是G-Suite 我在一个网站上有一个表单,通过AJAX提交给Google应用程序脚本。该脚本进行一些API调用,以创建包含表单收集的数据的Google文档 HTML/Javascript: <form> &l
/u/1
和/或/u/0
添加到脚本的URL,从而产生404错误
这是使用标准的谷歌账户,而不是G-Suite
我在一个网站上有一个表单,通过AJAX提交给Google应用程序脚本。该脚本进行一些API调用,以创建包含表单收集的数据的Google文档
HTML/Javascript:
<form>
<input type="text" name="full_name">
<input type="text" name="phone">
<input type="submit">
</form>
$('form').submit(function() {
var obj = $(this).serializeObject();
var gurl = "https://script.google.com/macros/s/AKfycbzmhaub3ojPARA-B-Y2uVC2BJZPaRvbgMwMTH9pd7R9aHuAD5M/exec";
$.ajax({
url: gurl,
type: "GET",
data: obj,
dataType: "jsonp",
success: function(data, status, xhr) {
console.log("success");
console.log(data);
});
});
function doGet(e){
var action = e.parameter.action;
if (action=="sendSuccess"){
justSendSuccess(e);
}
}
function justSendSuccess(e){
var output = JSON.stringify({"result":"success"});
return ContentService
.createTextOutput(e.parameter.callback+"("+ output + ");")
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
在同一浏览器中登录多个Google帐户时提交表单会导致控制台中出现以下错误,并且表单不会执行任何操作:
jquery.js?ver=1.12.4-wp:4获取
net::ERR_中止404
当我转到“网络”选项卡查看请求时,其中的标题选项卡显示以下内容:
Request URL: https://script.google.com/macros/u/1/s/AKfycbzmhaub3ojPARA-B-Y2uVC2BJZPaRvbgMwMTH9pd7R9aHuAD5M/exec?callback=jQuery112407830193282901534_1608623376571&s&full_name=Dave+Pe&phone=1111111111_=1608623376572
请注意插入到URL中的/u/1/
,它不在我传递给$.ajax()调用的URL中
对于这个问题,我找到的大多数答案都是只删除/u/1/
,但是由于我没有在第一个位置添加它,我不知道从哪里删除它
有人能证实这个看似已知的问题(当登录到多个谷歌账户时,URL被修改)是导致我出现问题的原因吗?关于我如何提出以下要求的任何想法:
https://script.google.com/macros/s/AKfycbzmhaub3ojPARA-B-Y2uVC2BJZPaRvbgMwMTH9pd7R9aHuAD5M/exec
而不是
https://script.google.com/macros/u/1/s/AKfycbzmhaub3ojPARA-B-Y2uVC2BJZPaRvbgMwMTH9pd7R9aHuAD5M/exec
???或者我在这里尝试使用谷歌脚本的方式有什么更严重的问题吗?我尝试运行它(通过一个帐户进行身份验证),它似乎可以工作。发生此错误的原因似乎是您通过了多个帐户的身份验证。而且,它似乎已经在Google Issue Tracker()上记录下来了。如果您想让它更可见,可以单击白色星形(☆) 这告诉谷歌你受到了这个问题的影响
请注意,您编写的代码将由每个人执行。此代码将拥有您的权限。请非常小心。您的帐户限制也可能适用。我的解决方案是将请求从客户端移动到服务器。我通过AJAX将表单值提交到服务器端页面,然后在该页面上,我进行HTTP重新设置将带有cURL的quest发送到我的googleapps脚本(在正文中发送表单数据),并将响应发送回客户端
似乎正在工作…我想不出任何问题,但这并不意味着它们不存在。如果在这种方法中有任何漏洞,请随时卸载
淡化
JavaScript
PHP
你也可以用这种方式做任何你想做的事情。
谷歌应用程序脚本(Code.gs):
<form>
<input type="text" name="full_name">
<input type="text" name="phone">
<input type="submit">
</form>
$('form').submit(function() {
var obj = $(this).serializeObject();
var gurl = "https://script.google.com/macros/s/AKfycbzmhaub3ojPARA-B-Y2uVC2BJZPaRvbgMwMTH9pd7R9aHuAD5M/exec";
$.ajax({
url: gurl,
type: "GET",
data: obj,
dataType: "jsonp",
success: function(data, status, xhr) {
console.log("success");
console.log(data);
});
});
function doGet(e){
var action = e.parameter.action;
if (action=="sendSuccess"){
justSendSuccess(e);
}
}
function justSendSuccess(e){
var output = JSON.stringify({"result":"success"});
return ContentService
.createTextOutput(e.parameter.callback+"("+ output + ");")
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
JavaScript部分:
function callGoogleScript(){
console.log("Started");
var url = "https://script.google.com/macros/s/###SCRIPT_ID###/exec";
$.ajax({
crossDomain: true,
url: url,
data: {
"action":"setInfo"
},
method: "GET",
dataType: 'jsonp',
jsonp: "callback",
success: function(data){
console.log("SUCCESS!");
console.log(data);
}
});
}
我无法理解我确实认为问题在于登录超过1个帐户时试图访问Google脚本,并且在脚本的URL前添加了/u/1和/u/0。
。对此我深表歉意。我可以问一下您当前问题的详细情况和目标吗?@Tanaike-抱歉,这是指已识别的问题在另一篇文章中,我引用了().在那篇文章中,问题的原因是用户同时登录了1个以上的Google帐户。我只是想说,我认为这个问题也是造成问题的原因。我的目标是将在我网站上收集的表单数据提交到Google应用程序脚本。我的问题是,请求URL被修改为包含u/1代码>导致404错误。那么你是说由于谷歌的这个已知问题,我的问题没有解决方案吗?有任何解决方法的建议吗?这个错误只在同时使用多个帐户登录时发生。所以一次只使用一个帐户登录。你可以使用incognito或会话容器扩展(所以没有必要每次都登录)。不是我,是用户填写表单……我无法控制他们登录了多少帐户。这基本上是OP中的代码,现在似乎正在运行。也许bug()已经解决了。。。
function callGoogleScript(){
console.log("Started");
var url = "https://script.google.com/macros/s/###SCRIPT_ID###/exec";
$.ajax({
crossDomain: true,
url: url,
data: {
"action":"setInfo"
},
method: "GET",
dataType: 'jsonp',
jsonp: "callback",
success: function(data){
console.log("SUCCESS!");
console.log(data);
}
});
}