我对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的上述错误。
答案 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});