[英]Displaying JSON won't work
看看這個小提琴: http : //jsfiddle.net/3JRU6/
$(document).ready(function(){
var url='http://api.worldbank.org/topic/4?per_page=10&format=json&callback=?';
var query;
$('button').click(function(){
$.getJSON(url,function(json){
$.each(json.results,function(i,data){
window.alert("found");
$("#results").append('<p>'+data.value+'</p>');
});
});
});
});
我想連接到世界銀行的開放數據,但是當我按下按鈕時,什么也沒發生。 我已經使用twitter API嘗試了相同的腳本,然后它確實起作用了。 原始鏈接沒有&callback =? 但是我必須添加它,因為出現錯誤。
提前致謝!
如果URL包含回調屬性,則getJSON
方法將進行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>');
});
});
});
Wordbank API不使用callback
屬性將響應輸出為JSONP
,您必須添加format=jsonP&prefix=?
在網址末尾使其有效。
您可以在此處找到有關“請求格式”的更多信息。
var url = 'http://api.worldbank.org/topic/4?per_page=10&format=jsonP&prefix=?';
$.getJSON(url, function(data) {
console.log(data);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.