【发布时间】:2011-02-26 17:19:38
【问题描述】:
请注意:“使用 jquery”或“使用(插入知名框架)”的答案没有帮助。诸如 jquery 之类的框架包含很多额外的代码,这对于我正在做的事情来说根本不是必需的。 '但是,你可以包含一个来自谷歌的',是的,可能是这样,但我更喜欢保留我自己的代码。考虑到这一点,让我们继续解决问题......
我有一个 ajax 调用,它不会在 IE7/IE8 上通过 POST vars,但仅在奇数情况下。它似乎是非常随机的,并且大部分时间它确实有效。
我看过 jquery,与这个自定义的相比,它的工作方式没有太大的不同。
这里是ajax函数:
function GetXmlHttpObject(handler){
var objxml = null;
if(handler==null) {
handler = function() {}
}
var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
try {
objxml = new XMLHttpRequest();
}
catch(e) {
for (var i = 0; i < ProgID.length; i++){
try {
objxml = new ActiveXObject(ProgID[i]);
}
catch(e) {
continue;
}
}
}
objxml.onreadystatechange=handler;
return objxml;
}
调用 Ajax 函数的函数应该是这样的:
function sample_ajax(object_type,object_id) {
var d = new Date();
var time = d.getTime();
var url= MYSITEURL + "my_ajax_script.php?timestamp="+time;
params = "object_type="+object_type+"&object_id="+object_id;
xmlHttp_comment_notifyreset = GetXmlHttpObject(sample_ajax_helper);//fails on safari 1
xmlHttp_comment_notifyreset.open("POST", url , true);
xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "no-cache");
xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "no-store");
xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "must-revalidate");
xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "post-check=0");
xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "pre-check=0");
xmlHttp_comment_notifyreset.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlHttp_comment_notifyreset.setRequestHeader("Content-Type", "application/x-www-form-URLencoded");
xmlHttp_comment_notifyreset.setRequestHeader("Content-Length", params.length);
xmlHttp_comment_notifyreset.setRequestHeader("Connection", "close");
xmlHttp_comment_notifyreset.send(params);
}
我看过 jquery,与这个自定义的相比,它的工作方式没有太大的不同。
【问题讨论】:
-
能否请您提供处理函数的代码示例。
-
“If-Modified-Since”是 POST 的有效标头吗?也许您应该删除它。
-
@naikus 是的 if-modified-since 在 Http1.1 规范中 w3.org/Protocols/rfc2616/rfc2616-sec14.html,一个简单的谷歌会为你找到。
-
@David:您的参数是否有可能有时包含需要进行 URL 编码的数据?另外,关于您的问题中有关 jQuery 的注释; jQuery 实际上默认使用 ActiveX 实现而不是原生 XMLHttpRequest 对象。也许这样做可以解决您的问题。
-
@David:您能否将失败的情况与特定的用户、价值观、浏览器版本或代理联系起来?事情很少会变得真正随机。
标签: javascript ajax internet-explorer post