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

最佳答案

http://danweber.blogspot.com/2007/04/ie6-and-error-code-12030.html

IE6和错误代码12030
如果您正在运行Internet Explorer 6并使用Ajax,则可能会得到一些XMLHttpRequest,它们的代码为12030。
Microsoft在http://support.microsoft.com/kb/193625上的知识库显示此代码是

12030ERROR_INTERNET_CONNECTION_ABORTED
              与服务器的连接已终止。
谷歌搜索没有帮助;遇到这种情况的人们似乎并不知道网络套接字是如何工作的,因此我必须自己亲自弄清楚。

当客户端认为连接一直保持打开状态,而服务器认为它已关闭时,就会发生这种情况。服务器已发送FIN,客户端已通过ACK响应。在Windows客户端上运行“ netstat”显示该连接处于CLOSE_WAIT状态,因此IE6实际上应该在尝试之前已经意识到这一点。这完全是客户的错。如果您等待大约60秒钟,Windows操作系统堆栈将退出该连接。

如果需要支持IE6,则可以通过各种方式解决一些问题:

如果出现错误代码12030,请重试ajax请求
如果是浏览器,则在每个ajax请求之前向服务器发送一个空请求
捆绑您的ajax请求,使它们之间的时间为((大于server_timeout)AND(小于server_timeout +一分钟)
IE7,fwiw,一旦意识到要建立传出连接,就会通过CLOSE_WAIT套接字发出RST。那样,套接字无论如何将仅保持在CLOSE_WAIT状态约5秒钟。

关于javascript - AJAX状态12030,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10318865/

10-12 13:42