【发布时间】:2016-08-04 15:00:33
【问题描述】:
我正在使用 JSONP 调用跨域 AJAX 请求。现在,我可以使用 CORS 使其工作。但是,我想知道为什么 JSONP 没有发生这种情况。我查看了其他有类似问题的线程,但无法弄清楚为什么它在我的情况下不起作用。
代码如下:
$.ajax({
type: "GET",
url: http://XXXX:8000/sap/bc/test_rest/jsonp_test?mode=S&ticket=123,
dataType: "jsonp",
jsonp: false,
jsonpCallback: "myJsonMethod",
success: function (data) {
alert(data);
},
error: function (httpReq, status, exception) {
alert(status + " " + exception);
}
});
现在,这会调用我的服务器,填充数据,然后我在回调 URL http://xxxx:8000/sap/bc/test_rest/jsonp_test?mode=S&ticket=123&_=1470322282936 上收到警报“解析错误 myJSONMethod 未调用”
此外,在控制台中,我得到的错误是 Uncaught SyntaxError: Unexpected token : 响应结构为:
{"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}}
当我在 jsonlint 上运行这个 JSON 输出时,它说它是一个有效的 JSON。我不知道 JSON 哪里搞砸了。
【问题讨论】:
-
你能分享
myJsonMethod代码吗? -
您需要将 json 包装在 myJsonMethod(...yourJSONhere...) 中。这意味着 JSONP
-
有效 JSON 与有效 JSONP 不同。这就是问题所在 - 您正在尝试使用返回 JSON 的 API,就好像它是 JSONP API 一样,这根本行不通。
-
谢谢各位!!!如果服务器没有自动提供 JSONP 支持,强制包装它并且它可以工作:D
标签: javascript jquery json ajax jsonp