使用JSONP使用GAS创建Web服务
我有以下代码。
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,但这并没有解决它。
只是设法让它,在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);
}
});
然后我得到一个“成功”的结果。 它伤害,但它的作品。
无论返回什么,您的JSONP都会返回错误的MIME类型。 JSONP的正确MIME类型是application/javascript
,因为它实际上只是JavaScript代码。
以下是JSON和JSONP之间区别的例子:
这里有一些JSON:
{"foo": "bar"}
...将适用于MIME类型application/json
。
这里用JSONP(也就是说JavaScript)表达同样的东西:
someCallbackName({"foo": "bar"})
...将适当地作为application/javascript
。