我正在从 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)
然后它再次发送整个请求,第二次立即通过。什么可能导致第一个失败的请求?自打开浏览器以来,每次我第一次向该 URL 发出请求时都会发生这种情况。