【问题标题】:Creating web service with GAS using JSONP使用 JSONP 使用 GAS 创建 Web 服务
【发布时间】:2014-07-13 09:48:50
【问题描述】:

我有以下代码。

var json = 回调 + '(' + Utilities.jsonStringify(range.getValues()) +')';

return ContentService.createTextOutput(json).setMimeType(ContentService.MimeType.JAVASCRIPT);

当我从另一个页面调用该应用时,我收到以下错误:

拒绝执行来自 'https://script.google.com/macros/s//exec?jsonp=callback' 的脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查。我该如何解决这个问题。看起来生成代码设置了 mime 类型,但它没有被兑现。另一方面,我生成了一个元素并将 mimetype 设置为 text/javascript,但这并不能解决问题。

【问题讨论】:

    标签: javascript jsonp


    【解决方案1】:

    刚刚成功,在 doGet 我回来了:

      return ContentService.createTextOutput(
        'on_result(' + JSON.stringify({hello:1}) + ')')
        .setMimeType(ContentService.MimeType.JAVASCRIPT);
    

    在 jQuery 方面我会这样做

    $.ajax({
      url: "YOUR_SCRIPT_URL",
      type: "GET",
      dataType: "jsonp",
      crossDomain: true,
      jsonpCallback: "on_result",
      success: function() {
        return console.log(arguments);
      },
      error: function() {
        return console.error(arguments);
      }
    });
    

    然后我得到一个“成功”的结果。很痛,但很管用。

    【讨论】:

      【解决方案2】:

      返回您的 JSONP 的任何内容都是以错误的 MIME 类型返回的。 JSONP 的正确 MIME 类型是 application/javascript,因为它实际上只是 JavaScript 代码。

      下面是 JSON 和 JSONP 区别的说明:

      这是一些 JSON:

      {"foo": "bar"}
      

      ...可以适当地使用 MIME 类型 application/json

      这里用JSONP(也就是JavaScript)表示的东西是一样的:

      someCallbackName({"foo": "bar"})
      

      ...可以适当地用作application/javascript

      【讨论】:

      • TJ,我明白了,但是在 GAS 中,我已经尝试过了,它仍然会产生那个错误
      猜你喜欢
      • 2012-07-19
      • 2013-04-18
      • 2012-09-14
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 2012-02-04
      • 1970-01-01
      相关资源
      最近更新 更多