2011-06-29 59 views
9

我一直試圖解決這個問題幾個小時(在這裏搜索,但沒有解決方案工作),所以我沒有其他選擇,但希望有人告訴我爲什麼這是發生,我該如何解決它。getJSON或AJAX請求不與IE9一起工作

這是一個簡單的代碼,與Firefox,但不與IE9工作(沒有其他版本)

示例代碼是在這裏:

http://jsfiddle.net/z5b2J/

來源是這樣的一個:

$.ajax({ 
    url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400", 
    success: function(){ 
    alert('hi'); 
    } 
}); 

該網站不需要是真實的測試目的。

正如你可以在Firefox下的小提琴中看到的,一個警告框會出現「hi」,但如果你在IE9中運行完全相同的代碼,alertbox不會出現。

getJSON方法也會出現這種情況,這對我來說是一個問題,因爲我想運行一些代碼而不是警報,但它不會在IE9中運行。

回答

13

你試過用getJSON()代替ajax嗎?這是一個跨域請求,你正在獲取json,這可能是問題所在。

它現在的工作在這兩個瀏覽器:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){ 
    alert('hi'); 
}); 
+0

「getJSON方法發生同樣的情況」是的,我嘗試過。 – MikeJ

+0

嘗試以上。這個小提琴適用於我:http://jsfiddle.net/z5b2J/7/ –

+8

(記住你必須在URL中加入「&callback =?」參數......這是一種方法,或者你可以指定'jsonp'作爲你的$ ajax調用中的數據類型 –

4

使用$.getJSON$.ajax還必須使用的getJSON指定dataType參數 'JSONP'

下面的例子:

var webpage = ".... your very long url ...."; 
var anchor = document.createElement('a'); 
anchor.href = webpage; 
// handle the multiple parameters 
anchor.search += ((anchor.search.length > 0) ? "&" : "?"); 
anchor.search += "callback=?"; 

$.getJSON(anchor.href, 'jsonp', function(data, textStatus, jqXHR){ 
    alert('hi'); 
}); 
+2

只有當你真正使用jsonp時纔會這樣。 – nikolasleblanc

6

問題的IE9依賴於高級緩存管理。

如果您清空IE的緩存並重新運行ajax請求:第一次將工作。

要解決此問題,您必須發送帶有「noStore = true」和「Duration = 0」或同等值的HTTP響應。

這是example in MVC

2

我的如果添加的回調將「持續時間= 0」的網址

2

解決的問題=?到URL,它將被轉換爲類似於callback = jQuery1820719005049791166_1366033695001。它是函數的名稱,在服務器端,你應該在你的函數調用中包裝你的json編碼對象。所以你的響應體不應該只是{ok:true},而是jQuery1820719005049791166_1366033695001({ok:true}); 。它爲我工作!