jQuery / Ajax IE7 - 长请求失败

时间:2010-06-08 11:06:16

标签: javascript jquery ajax

我对IE7有关jQuery.load函数调用的ajax调用有问题。

基本上,请求适用于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的上述错误。

3 个答案:

答案 0 :(得分: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);
});

由于.load()在解析对象时会在内部使用“POST”请求,因此如果您需要“GET”请求,可以考虑将其替换为$.get()

答案 1 :(得分:4)

因为load使用HTTP Get方法,所以url的大小是有限的,据我所知,这是4KB。因此,使用带有HTTP Post选项的$ .ajax而不是GET。邮政没有限制。

使用以下代码。

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

               }
       });

答案 2 :(得分:0)

我遇到了同样的问题。我一直在通过URL(长查询字符串)发送所有内容,但它失败了。我发现关键是将数据发送到自己的参数(在本例中为dataparms),这只是URL的查询字符串部分。

$ .ajax({type:“POST”,url:URL,data:dataparams,dataType:“html”,async:false});