Javascript 如何解决';MIME类型不匹配错误';阻止我的Google Apps脚本中AJAX请求的资源?

Javascript 如何解决';MIME类型不匹配错误';阻止我的Google Apps脚本中AJAX请求的资源?,javascript,jquery,ajax,google-apps-script,web-applications,Javascript,Jquery,Ajax,Google Apps Script,Web Applications,我试图用Jquery.ajax而不是fetch实现代码 在进行AJAX调用时,出现以下错误: 来自的资源”https://script.googleusercontent.com/macros/echo?...“由于MIME类型(“应用程序/json”)不匹配(X-Content-type-Options:nosniff)而被阻止。” GoogleApps脚本可以很好地与cURL配合使用,因此我怀疑我的(非常简单的)GApps脚本和我的客户端脚本之间存在一些分歧 以下是GApps脚本: func

我试图用
Jquery.ajax
而不是
fetch
实现代码

在进行AJAX调用时,出现以下错误:

来自的资源”https://script.googleusercontent.com/macros/echo?...“由于MIME类型(“应用程序/json”)不匹配(X-Content-type-Options:nosniff)而被阻止。”

GoogleApps脚本可以很好地与cURL配合使用,因此我怀疑我的(非常简单的)GApps脚本和我的客户端脚本之间存在一些分歧

以下是GApps脚本:

function doGet(e) {
  const id = e.parameter.spreadsheetId;
  const sheetName = e.parameter.sheetName;
  const sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName);
  const values = sheet.getDataRange().getValues();
  return ContentService.createTextOutput(JSON.stringify({values: values})).setMimeType(ContentService.MimeType.JAVASCRIPT);
}
注意:我尝试将最后一行的
MimeType
更改为
JSON
,但没有成功

以下是我在客户端脚本中调用的AJAX设置:

var settings = {
    'cache': false,
    'dataType': "jsonp",
    'async': true,
    'crossDomain': true,
    'url': url,
    'method': 'GET',
    'headers': {
        'accept': 'application/json',
        'Access-Control-Allow-Origin': '*'
    }
};
我在Firefox工作。Chrome中也出现了类似的错误。
我如何解决这个问题?

我相信你的目标如下

  • 您希望使用
    jQuery.ajax()
    而不是
    fetch
    请求Web应用程序
为此,当您的
设置被修改时,下面的修改如何

修改脚本: 示例脚本:
var url = 'https://script.google.com/macros/s/###/exec';
var settings = {
  'url': url,
  'method': 'GET',
  'dataType':"json",
  'data': {spreadsheetId: "###SpreadsheetId###", sheetName: "###SheetName###"},
};
$.ajax(settings).done(res => {
  console.log(res.values);  // By this, you can retrieve the values of `{values: values}` from Web Apps.
}).fail(err => console.log(err));
注:
  • 当您修改Web应用的Google应用脚本时,请将Web应用重新部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请小心这个
  • 在上面修改的脚本中,可以使用您的谷歌应用程序脚本
  • 在这种情况下,我可以确认上面的脚本与Chrome一起工作
参考:

    • 我相信你的目标如下

      • 您希望使用
        jQuery.ajax()
        而不是
        fetch
        请求Web应用程序
      为此,当您的
      设置被修改时,下面的修改如何

      修改脚本: 示例脚本:
      var url = 'https://script.google.com/macros/s/###/exec';
      var settings = {
        'url': url,
        'method': 'GET',
        'dataType':"json",
        'data': {spreadsheetId: "###SpreadsheetId###", sheetName: "###SheetName###"},
      };
      $.ajax(settings).done(res => {
        console.log(res.values);  // By this, you can retrieve the values of `{values: values}` from Web Apps.
      }).fail(err => console.log(err));
      
      注:
      • 当您修改Web应用的Google应用脚本时,请将Web应用重新部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请小心这个
      • 在上面修改的脚本中,可以使用您的谷歌应用程序脚本
      • 在这种情况下,我可以确认上面的脚本与Chrome一起工作
      参考:

      jsonp是一个脚本请求,不接受任何请求头。不确定您为什么选择jsonp,它已经不再被使用了。示例中的
      fetch()。访问控制头也不是请求头,它们必须设置在服务器端谢谢您的澄清。对于我想要实现的目标,没有太多明确的答案。我采取了一种类似厨房水槽的方法来绕过浏览器给我的CORS错误。@charlietfl回顾我的笔记,这是我最初脚本的依据。在这一点上是学术性的,但是你知道为什么它对他们有效而对我无效吗?jsonp是一个脚本请求,不接受任何请求头。不确定您为什么选择jsonp,它已经不再被使用了。示例中的
      fetch()。访问控制头也不是请求头,它们必须设置在服务器端谢谢您的澄清。对于我想要实现的目标,没有太多明确的答案。我采取了一种类似厨房水槽的方法来绕过浏览器给我的CORS错误。@charlietfl回顾我的笔记,这是我最初脚本的依据。在这一点上是学术性的,但你知道为什么这对他们有效而对我无效吗?