2012-07-18 67 views
0

我正在將一個變量傳遞給一個URL,該URL隨後會調用通過所傳遞變量過濾的API。但是,我似乎無法加載JSON,並在JS中的Firebug控制檯中返回無效錯誤。思考?使用jQuery檢索JSON API時出現無效錯誤

$("a").click(function() { 
    var apiurl = "http://api.example.com" + $(this).text() + "&limit=500" + "?callback=?"; 

    $.ajax({ 
     url: apiurl, 
     success: function(json) {alert(json.data.results);}, 
     error: function() { alert("error"); }, 
     dataType: "json", 
     contentType: "application/json;charset=utf-8", 
    }); 
}); 

這是錯誤: 無效標籤 誤差源極線: [打破此錯誤]
{ 「代碼」:200, 「狀態」: 「OK」, 「數據」:{」偏移量「:0,」limit「:500,」total「:17,」target「:」ch ...

回答

3

刪除:contentType: "application/json;charset=utf-8"您也可以使用$.getJSON()方法,它是你已經寫了,並且不要忘記從你的點擊處理程序返回false,否則你的調用可能永遠沒有時間執行,然後瀏覽器重定向到錨點的href之後被點擊。另一個需要注意的問題是,您應該在url中使用'&callback=?'而不是'?callback=?',因爲您顯然已經擁有limit查詢字符串參數,因此您只需添加另一個。我想在$(this).text()包含某處指示查詢字符串的開始?這種情況下:

$('a').click(function() { 
    var apiurl = 'http://api.example.com' + $(this).text() + '&limit=500' + '&callback=?'; 
    $.getJSON(apiurl, function(json) { 
     alert(json.data.results); 
    }); 
    return false; 
}); 

此外,我希望你明白,callback=?意味着JSONP是您試圖調用必須支持的API。否則,您的通話將始終失敗,因爲您違反了same origin policy限制。

+0

我明白了,謝謝你的見解。在這種情況下,如果我刪除回調=?字符串中的URL,警報不會觸發(沒有任何反應)。我在本地工作並從另一臺服務器請求API。我認爲JSONP是解決這個問題的方法,但是我可能會錯過一些東西,因爲我對JSON – Yasir 2012-07-18 17:05:15

+0

的問題還很陌生,如何檢查JSONP支持? – Yasir 2012-07-18 17:06:39

+0

是的,如果您嘗試執行跨域AJAX調用,則可以使用JSONP(如果遠程服務支持它)。如果沒有,則不能從腳本中調用它。爲了檢查遠程服務是否支持JSONP,有兩種方法:1.閱讀你嘗試使用的API的文檔。 2.您試圖在瀏覽器中輸入一個示例請求:'http://api.example.com?limit = 500&callback = abc'並觀察返回的JSON是否會被封裝在'abc'函數中。如果不存在兩種可能性:1.遠程服務器不支持JSONP或... – 2012-07-18 17:07:19

相關問題