Javascript 对已部署WebApp的Google Apps脚本URL的请求产生404错误

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

这个问题与这里发布的其他问题(例如)非常相似。这并不完全相同,但我相信这与那篇文章中说明的根本问题是一样的,即在登录到多个Google帐户时尝试向Google应用程序脚本提交表单会导致
/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);
  }
});

    }