2014-01-20 45 views
2

我一直試圖通過在他們的API上執行跨域AJAX請求來利用世界銀行API。由於他們的developer page上市,基本的通話語法是:jQuery跨域AJAX參考錯誤

http://api.worldbank.org/countries/all/indicators/SP.POP.TOTL?format=jsonP&prefix=Getdata Note: For JsonP format, 'prefix' parameter needs to be specified.

以下是我在我的代碼中使用精簡版:不過,我碰到這個錯誤每次

$.ajax({ 
      url:'http://api.worldbank.org/countries/indicators/'+req.indicator+'? 
       format=jsonP', 
      dataType: 'jsonP', 
      jsonp : "prefix", 
      success : function(res){ 

      console.log("Success"); 
      console.log(res) 
      var count = res[0].total; 

     if(requestdata['per_page'] == 1){ 

       request(req, count); 
      } 
      else{ 
       var grid = formatResponse(res); 
      } 
     }, 
     error : function(xhr, status, error){ 
      console.log("Error"); 
      console.log(xhr.statusText); 
      console.log(xhr.responseText); 
      console.log(xhr.status); 
      console.log(error); 
     } 
    }) 

通過取樣指示器,說,SP.DYN.CDRT.IN

Uncaught ReferenceError: jquery17209248960050754249_1390249074104 is not defined

如果有幫助,控制檯輸出是:

Error 
success 
*undefined* 
200 
Error {} 

我想上面的引用是對jQuery調用中使用的匿名回調。 我很笨,但它爲什麼不工作。有任何想法嗎?

+0

控制檯的網絡選項卡顯示的是對該域名的調用?你使用的是什麼瀏覽器? – MonkeyZeus

+0

我在Linux上使用Chrome 31.0.1650.63。 [This](http://paste.ubuntu.com/6788073/)是我在網絡選項卡中得到的迴應 –

+0

這應該是一個JSON字符串嗎? – MonkeyZeus

回答

3

問題出在您所調用的API上。他們是不正確創建JSONP響應。

jQuery傳遞的回調名稱爲jQuery123456_7890,但該API正試圖呼叫jquery123456_7890。 JavaScript中的功能區分大小寫。該API是錯誤轉換函數名稱爲全部小寫,不知道爲什麼。

您需要通過告訴jQuery使用全部小寫的回調名來解決這個問題。這就是jsonpCallback參數的用途。

$.ajax({ 
    url: 'http://api.worldbank.org/countries/indicators/'+req.indicator+'?format=jsonP', 
    dataType: 'jsonp', 
    jsonp: "prefix", 
    jsonpCallback: "jquery_"+(new Date).getTime(), 
    success: function(res){ 
     console.log("Success"); 
     console.log(res) 
     var count = res[0].total; 

     if(requestdata['per_page'] == 1){ 
      request(req, count); 
     } 
     else{ 
      var grid = formatResponse(res); 
     } 
    }, 
    error: function(xhr, status, error){ 
     console.log("Error"); 
     console.log(xhr.statusText); 
     console.log(xhr.responseText); 
     console.log(xhr.status); 
     console.log(error); 
    } 
}) 
+1

很好的發現,謝謝!我想我應該把這些信息傳遞給API開發人員 –

+1

@AshwiniKhare:很高興能幫到你! :-是的,我會讓他們知道他們的API會產生不正確的迴應:-) –