2

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

2 回答 2

1

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

IE6 和错误代码 12030 如果您正在运行 Internet Explorer 6 并使用 Ajax,您可能会收到一些 XMLHttpRequests 以代码 12030 终止。Microsoft 的知识库http://support.microsoft.com/kb/193625显示此代码是

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

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

如果你需要支持 IE6,你有一些解决方案,不同程度的丑陋:

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

于 2015-01-16T08:30:05.920 回答
0

有时,使用

setRequestHeader("Connection","close");

可能会导致某些浏览器出现问题。

删除它可以解决问题。

归功于@MikeRobinson

于 2012-04-26T12:09:17.747 回答