getJSON
如果 URL 包含回调属性,该方法将进行 JSONP 调用。
“如果 URL 包含字符串“callback=?”(或类似的,由服务器端 API 定义),则请求将被视为 JSONP。
参考:http ://api.jquery.com/jQuery.getJSON/
请求工作正常,数据到达浏览器,但由于响应是 JSON 而不是 JSONP,数据只是被丢弃,不会调用成功回调方法。
我尝试在 URL 中更改format=json
为format=jsonp
,但响应是错误消息:
<fault>
<faultstring>Fault raised in a policy</faultstring>
<detail>
<errorcode>31326</errorcode>
<trace>
Fault Name: JSONP Bad Request
Error Type: MessageRouter
Description: Fault raised in a policy
Service: worldbank
Endpoint: target
Operation (Target):defaultOperation
FlowTransitionState : Target_Request_User_Error
Policy : EnforceMediationOnRequestPolicy
RaiseFaultAssertion
</trace>
</detail>
</fault>
您必须向您的 API 提供商咨询如何发出 JSONP 请求而不是 JSON 请求。
编辑:
正如 Jimmy Oliger 所说,API 使用prefix
属性而不是callback
. 我试过了,jQuery 实际上使用了该属性,并调用了成功回调。
响应是一个数组,其中第一项是分页信息,第二项是包含数据的数组,所以循环json[1]
显示数据:
演示:http: //jsfiddle.net/Guffa/3JRU6/4/
var url = 'http://api.worldbank.org/topic/4?per_page=10&format=jsonp&prefix=?';
var query;
$('button').click(function() {
$.getJSON(url, function(json) {
$.each(json[1], function(i, data) {
$("#results").append('<p>' + data.value + '</p>');
});
});
});