我有以下代码。
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但是没有修复它。
答案 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);
}
});
然后我获得了成功"结果。它会疼,但它确实有效。