1

https ページから https ページに Ajax リクエストを送信しています。他のすべてのブラウザーでは、これは即座に処理されますが、Chrome では長時間 (通常は約 40 秒) ハングします。

何が原因でしょうか? どうすれば修正できますか?

ハングの原因にもなる JQuery コードの例

<html>
<head>
    <script type="text/javascript" src="jquery-1-9-1.js"></script>
</head>
<body>
<br/>
<a onclick="doit()">go</a>
<script>
    function doit()
    {
        var myData = { "key": "value" };
        $.ajax({
                url: "myhandlepage.php",
                data: myData,
                dataType: 'json',
                type: 'POST',
                contentType: 'application/x-www-form-urlencoded',
                success: function (data) { alert("OK = " + data.eric); },
                error: function (data, status) { alert("FAILED:" + status); }
        });
    }
</script>
</body>
</html>

サンプルコード

//Create browser-compliant request object
if( typeof XMLHttpRequest === "undefined" ) XMLHttpRequest = function()
{
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}

    throw new Error( "This browser does not support XMLHttpRequest." );
};

//Create object
var ajax = new XMLHttpRequest();    

//We need to open the object
ajax.open( "post", "/myhandlepage.php", true );

//Now set the callback
ajax.onreadystatechange = function()
{
    //elided, but doesn't matter, I can see the 40+ second delay in chrome developer tools
}.bind( this );

//Send the request
ajax.send( mycontent );

明確にするために: Chrome の開発者ツールにはエラーは表示されません。

編集:この問題は、Chrome のタブ/ページに対する最初のリクエストでのみ発生するようです。同じタブ/ページのすべての ajax リクエストは、最初の遅延リクエストの直後に通過するようです。

詳細 chrome:net-internals/#events を見ると、ハングしているリクエストのみが表示されます。すべてのリクエストの途中で、次のように表示されます。

t=1360622033867 [st=    4]        HTTP_STREAM_PARSER_READ_HEADERS  [dt=38643]
                              --> net_error = -100 (ERR_CONNECTION_CLOSED)

次に、リクエスト全体を再度送信すると、2 回目は即座に送信されます。この最初の失敗した要求の原因は何ですか? ブラウザを開いてから初めてその URL にリクエストを行うたびに発生します。

4

0 に答える 0