AJAX状态12030

时间:2012-04-25 15:32:03

标签: javascript ajax xmlhttprequest http-status-codes

我使用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);

2 个答案:

答案 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