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是单线程的。