2010-06-08 83 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});}};