使用JSONP使用GAS创建Web服务

时间:2014-05-23 22:42:33

标签: javascript jsonp

我有以下代码。

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

返回ContentService.createTextOutput(json).setMimeType(ContentService.MimeType.JAVASCRIPT);

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

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

2 个答案:

答案 0 :(得分:0)

无论你返回的是什么,你的JSONP都会以错误的MIME类型返回它。 JSONP的正确MIME类型是application/javascript,因为它实际上只是JavaScript代码。

以下是JSON和JSONP之间差异的说明:

这里有一些JSON:

{"foo": "bar"}

...适当地使用MIME类型application/json提供。

这里表达的是与JSONP相同的东西(也就是说,JavaScript):

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

...适当地用作application/javascript

答案 1 :(得分:0)

我设法做到了,在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);
  }
});

然后我获得了成功"结果。它会疼,但它确实有效。