Php 带超时条件的XMLHTTPRequest

Php 带超时条件的XMLHTTPRequest,php,javascript,ajax,xmlhttprequest,Php,Javascript,Ajax,Xmlhttprequest,在XMLHTTPRequest中,如何使用超时条件,以便在固定时间内(例如5秒)没有来自服务器的响应时,它应该显示错误消息 换句话说,请求应等待5秒钟,如果服务器没有响应,则应显示消息“超时。请稍后重试”。如果代码能够同时适用于同步和异步,那就更好了 我使用的以下代码没有超时条件 function testXMLHTTP() { if(window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); }

XMLHTTPRequest
中,如何使用超时条件,以便在固定时间内(例如5秒)没有来自服务器的响应时,它应该显示错误消息

换句话说,请求应等待5秒钟,如果服务器没有响应,则应显示消息“超时。请稍后重试”。如果代码能够同时适用于同步和异步,那就更好了

我使用的以下代码没有超时条件

function testXMLHTTP()
{
    if(window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
        else if(xmlhttp.readyState < 4)
        {
            document.getElementById("myDiv").innerHTML="Loading...";
        }
    }

    xmlhttp.open("GET","abcd.php",true);
    xmlhttp.send();     
}
函数testXMLHTTP()
{
if(window.XMLHttpRequest)
{
xmlhttp=新的XMLHttpRequest();
}
其他的
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“myDiv”).innerHTML=xmlhttp.responseText;
}
else if(xmlhttp.readyState<4)
{
document.getElementById(“myDiv”).innerHTML=“加载…”;
}
}
open(“GET”,“abcd.php”,true);
xmlhttp.send();
}

< /代码> 如果您能够为项目使用外部库,则可以考虑:允许您为请求指定超时。在大多数浏览器中(显然,IE8+除外),都没有内置的方法来使用
XMLHTTPRequest
对象处理超时,因此您需要在一段时间后检查请求的状态。更彻底地探讨了这个特定的解决方案,但如果可以的话,我仍然建议使用jQuery。

下面是一个针对XHR的干净超时解决方案,它是我为ajax轮询系统制作的:

function doRequest() {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // Process request.
        }
    }
    xmlhttp.open("GET", "/your/script", true);
    xmlhttp.send();
    setTimeout(function() {
        if (xmlhttp.readyState < 4) {
            // Timeout !
            xmlhttp.abort();
        }
    }, 3000);
}
函数doRequest(){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
//处理请求。
}
}
open(“GET”,“/your/script”,true);
xmlhttp.send();
setTimeout(函数(){
if(xmlhttp.readyState<4){
//暂停!
xmlhttp.abort();
}
}, 3000);
}

它的好处是,您可以多次调用它,并且每个超时保持独立。(例如,您可以每秒钟调用一次此函数,三秒钟后,只有第一个请求才会超时)。

看看同步请求是否可能,因为JavaScript是单线程的。