我使用POST方法发送ajax XMLHttpRequest。发送请求时,我的readyState为4,状态为12030.我知道12030是Microsoft特定的状态代码,表示连接未得到维持。但是,我似乎无法找到我的代码将导致此错误的位置。如果我在不使用ajax请求的情况下导航到该页面,则可以正常加载。下面是javascript方法和调用行。
AJAX方法
/*Sends ajax request with post data that updates the content view via ajax on completion
* @param message : message after completion of ajax request
* @param url : url to request
* @param params : post parameters as string
*/
function changeAjaxPost(message, url, params) {
var ajx;
if (window.HXMLHttpRequest) {
UtilLogger.log(HtmlLogger.FINE, "Using XMLHttpRequest");
ajx = new XMLHttpRequest();
}
else {
UtilLogger.log(HtmlLogger.FINE, "Using ActiveXObject");
ajx = new ActiveXObject("Microsoft.XMLHTTP");
}
ajx.open("POST", url, true);
ajx.setRequestHeader("X-Requested-With", "XMLHttpRequest");
ajx.setRequestHeader("Content-Type", "text/html");
ajx.setRequestHeader("Content-length", params.length);
ajx.setRequestHeader("Connection", "close");
ajx.send(params);
ajx.onreadystatechange = function () {
document.write(ajx.readyState + ":" + ajx.status);
if (ajx.readyState == 4 && ajx.status == 200) {
alert(message);
updateContent();
}
else if (ajx.readyState == 4 && ajx.status == 400) {
alert("Page Error. Please refresh and try again.");
}
else if (ajx.readyState == 4 && ajx.status == 500) {
alert("Server Error. Please refresh and try again.");
}
}
}
致电热线
changeAjaxPost("Excerpt Saved", "./AJAX/myadditions_content.aspx", params);
答案 0 :(得分:1)
http://danweber.blogspot.com/2007/04/ie6-and-error-code-12030.html
IE6和错误代码12030 如果您运行的是Internet Explorer 6并使用Ajax,则可能会使用代码12030终止一些XMLHttpRequests。 Microsoft http://support.microsoft.com/kb/193625的知识库显示此代码为
12030 ERROR_INTERNET_CONNECTION_ABORTED 与服务器的连接已终止。 谷歌搜索没有帮助;遇到这种情况的人似乎并不知道网络套接字如何工作,所以我必须自己解决这个问题。
当客户端认为连接已保持打开且服务器被关闭时,就会发生这种情况。服务器已发送FIN,客户端已通过ACK响应。在Windows客户端上运行“netstat”表明连接处于CLOSE_WAIT状态,因此IE6确实应该在尝试之前实现了这一点。这完全是客户的错。如果等待大约60秒,Windows操作系统堆栈将退出连接。
如果你需要支持IE6,你有一些不同程度的解决方案:
如果出现错误代码12030,请重试ajax请求 如果浏览器是ie,则在每个ajax请求之前向服务器发送空请求 捆绑你的ajax请求,使它们之间的时间是((大于server_timeout)AND(小于server_timeout +一分钟) IE7,fwiw,一旦意识到它有一个传出连接,就会在CLOSE_WAIT套接字上发出一个RST。那个,套接字只会保持在CLOSE_WAIT状态大约5秒钟。
答案 1 :(得分:0)
有时,使用
setRequestHeader("Connection","close");
会导致某些浏览器出现问题。
删除它可以解决问题。
归功于@MikeRobinson