2

POSTメソッドを使用してajaxXMLHttpRequestを送信しています。リクエストが送信されると、ステータスが12030のreadyStateが4になります。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とエラーコード12030InternetExplorer 6を実行していてAjaxを使用している場合、一部のXMLHttpRequestがコード12030で終了することがあります。http://support.microsoft.com/kb/193625にあるMicrosoftのナレッジベース、このコードが

12030ERROR_INTERNET_CONNECTION_ABORTEDサーバーとの接続が終了しました。グーグルは助けにならなかった。これに遭遇した人々はネットワークソケットがどのように機能するかを知らないようです、それで私は実際にそれを自分で理解しなければなりませんでした。

これは、クライアントが接続が開いたままになっていると考え、サーバーが接続を閉じていると判断した場合に発生します。サーバーはFINを送信し、クライアントはそれにACKで応答しました。Windowsクライアントで「netstat」を実行すると、接続がCLOSE_WAIT状態にあることが示されるため、IE6は実際に試行する前にこれを認識しているはずです。これは完全にクライアントの責任です。約60秒待つと、WindowsOSスタックは接続を終了します。

IE6をサポートする必要がある場合は、さまざまな程度の醜い解決策があります。

エラーコード12030の場合、ブラウザが次の場合にajaxリクエストを再試行します。つまり、各ajaxリクエストの前に空のリクエストをサーバーに送信し、それらの間の時間が((server_timeoutより大きい)AND(より小さい)になるようにajaxリクエストをバンドルします。 server_timeout + 1分)IE7、fwiwは、発信接続があることを認識するとすぐにCLOSE_WAITソケットに対してRSTを発行します。これにより、ソケットはとにかく約5秒間だけそのCLOSE_WAIT状態に留まります。

于 2015-01-16T08:30:05.920 に答える
0

時々、

setRequestHeader("Connection","close");

一部のブラウザで問題が発生する可能性があります。

これを削除すると問題が解決します。

クレジットは@MikeRobinsonに送られます

于 2012-04-26T12:09:17.747 に答える