2010-06-08 108 views
1

我有一個關於jQuery.load函數所做的ajax調用的IE7問題。jQuery/Ajax IE7 - 長請求失敗

基本上,請求在URL字符串不太長的情況下起作用,但只要URL變得非常大,它就會失敗。這樣做的Ajax調用一些調試,我發現這個錯誤:

URL: <blanked out security reasons but it's very long> 
Content Type: 
Headers size (bytes): 0 
Data size (bytes): 0 
Total size (bytes): 0 
Transferred data size (bytes): 0 
Cached data: No 
Error result: 0x800c0005 
Error constant: INET_E_RESOURCE_NOT_FOUND 
Error description: The server or proxy was not found 
Extended error result: 0x7a 
Extended error description: The data area passed to a system call is too small. 

正如你所看到的,它看起來像沒有被髮送。現在這隻發生在IE7上,但不是其他瀏覽器,IE8有一個小延遲,但仍然有效。當URL字符串相對較小時,相同的請求正常工作。

爲了兼容性的原因,現在我需要在IE7上工作,並且我找不到解決方法。

實際的AJAX調用是這樣的:

$("ID").load("url?lotsofparams",callbac func(){}); 

「lotsofparams」 可以改變,有時是小或非常大。這是字符串非常大,我只有IE7上面的錯誤。

回答

4

由於load使用HTTP Get方法,所以url的大小是有限制的,據我所知4KB。因此,不要使用GET,請使用$ .ajax和HTTP Post選項。郵政沒有限制。

使用下面的代碼。

$.ajax({ 
       url: url, 
       type: "POST", 
       async: true, 
       data: {name1: value1, name2: value2, ...}, // put your data. 
       success: function(data, textStatus) { 
       $("ID").html(data); 

       } 
     }); 
+0

該方法是正確的,但GET請求的限制是每個瀏覽器,並且取決於版本,所以它到處都是。 – 2010-06-08 11:40:37

+0

是的這種方法我可以很容易地與現有的代碼整合,效果很好。 – 2010-06-08 12:25:40

4

不要把query string parameters加入到網址中。

.load()的第二個參數就是爲此而設計的。應該是:

$("ID").load("url", { 
    foo:  "bar", 
    morefoo: "morebar" 
},callbac func(){}); 

,或者您可以使用$.post()

$.post("url", { 
    foo:  "bar", 
    morefoo: "morebar" 
}, function(data){ 
    alert(data); 
}); 

由於​​將在內部使用「POST」請求解析的對象時,你可能會考慮,如果你需要一臺帶有$.get()來代替它「GET」請求。

+0

嗯,這就是我認爲...這將是一個麻煩,因爲該查詢字符串建立在幾個地方,並存儲在變量形式「var = val」奇怪的是它適用於FF和IE8。 – 2010-06-08 11:24:15

+0

這不僅僅是一個客戶端的改變,你應該提到他可能不得不改變服務器端的東西,因爲這兩個解決方案都不是'GET'了......這是一個重要的補充。 – 2010-06-08 11:25:14

+0

@Nick:'.load()'在下面使用'.get()'。 – jAndy 2010-06-08 11:27:09

0

我遇到了同樣的問題。我一直通過URL(長查詢字符串)發送所有內容,並且失敗。我發現關鍵是在它自己的參數(在這個例子中是dataparms)中發送數據,這只是URL的查詢字符串部分。 $ {.ajax({type:「POST」,url:URL,data:dataparams,dataType:「html」,async:false});}};