2013-05-20 68 views
2

我正在使用JSONP從第三方(與我的網站不同)獲取JSON數據的Ajax調用及其在Chrome和Firefox上的工作,但在IE上失敗(9 & 10是我試過的版本)。在IE調試器中,我看到調用正在完成(使用Http 200),但是我爲JSONP調用指定的回調沒有被調用。回調沒有得到在Internet Explorer上調用Ajax JSONP調用

我的代碼如下所示:

$.ajax({ 
    url: 'http://api.yipit.com/v1/deals/?key=mykey&division=seattle&limit=1000', 
    dataType: 'jsonp', 
    contentType: "text/javascript", 
    async: false, 
    cache: false, 
    crossDomain: true, 
    jsonp: 'callback', 
    jsonpCallback: 'processResult', 
    error: function (xhr, textStatus, error) { 
     window.alert(error); 
    }, 
    success: function (data) { 
     window.alert(JSON.stringify(data)); 
     _yipit_deals = data.response.deals; 
    } 
}); 

和響應身體看起來是這樣的:

<html><body><pre>processResult({ 
... [valid JSON data] 
});</pre></body></html> 

當調用時,誤差函數得到調用,錯誤爲:Error: processResult was not called和IE調試器顯示嘗試解析響應中的<html><body><pre>標記時導致的腳本錯誤。在Chrome和Firefox上運行時,這些HTML標記不存在存在於響應正文中,我不確定爲什麼響應在IE的情況下不同。

看來,這些標籤導致IE瀏覽器無法調用回調。我試過爲contentType指定其他值,比如「text/html」,「text」,「application/javascript」,甚至根本沒有指定它,但它沒有任何區別。我正在使用JSONP來解決跨域問題。

任何想法?謝謝!

回答

1

你必須明確format參數傳遞給網址:

&format=json 

否則,它只是漂亮,打印輸出:

<html><body><pre>{ 
    "meta": { 
     "code": 401, 
     "message": "Key not recognized", 
     "name": "AuthenticationFailed" 
    }, 
    "response": {} 
}</pre></body></html> 

另外,我想設置asynctrue

+0

解決了!謝謝一堆。是的,我會將異步設置爲true。這個問題讓我瘋狂,所以再次感謝! – user2403423

+0

只是澄清,添加'&format = json'到URL解決了我的問題。將'contentType'設置爲'application/json'不起作用。 – user2403423

+0

@ user2403423:好吧,至少有一個工作。 – Blender