当前位置: 首页 > 面试题库 >

如何在浏览器中的AJAX(XmlHttpRequest)调用上检测超时?

雷锋
2023-03-14
问题内容

我正在网上寻找资料,但是很难获得文档。我们都知道使用浏览器的内置XMLHttpRequest对象进行基本的AJAX调用(此处为现代浏览器):

var xmlHttp = new XMLHttpRequest();  // Assumes native object

xmlHttp.open("GET", "http://www.example.com", false);

xmlHttp.send("");

var statusCode = xmlHttp.status;
// Process it, and I'd love to know if the request timed out

因此,有没有一种方法可以通过在浏览器中检查XMLHttpRequest对象来检测到AJAX调用超时?建议我做类似的事情window.setTimeout(function(){ xmlHttp.abort() }, 30000);吗?

谢谢!


问题答案:
var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", "http://www.example.com", true);

    xmlHttp.onreadystatechange=function(){
       if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
          clearTimeout(xmlHttpTimeout); 
          alert(xmlHttp.responseText);
       }
    }
    // Now that we're ready to handle the response, we can make the request
    xmlHttp.send("");
    // Timeout to abort in 5 seconds
    var xmlHttpTimeout=setTimeout(ajaxTimeout,5000);
    function ajaxTimeout(){
       xmlHttp.abort();
       alert("Request timed out");
    }

在IE8中,您可以向对象添加超时事件处理程序XMLHttpRequest

var xmlHttp = new XMLHttpRequest();
xmlHttp.ontimeout = function(){
  alert("request timed out");
}

我建议不要像代码中所暗示的那样进行同步调用,也建议使用javascript框架来做到这一点。jQuery 是最受欢迎的一种。它使您的代码更高效,更易于维护并且与跨浏览器兼容。



 类似资料:
  • 问题内容: 我正在网上浏览,但是很难获得文档。我们都知道使用浏览器的内置对象进行基本的AJAX调用(此处为现代浏览器): 因此,有没有一种方法可以通过在浏览器中检查XMLHttpRequest对象来检测AJAX调用是否超时?建议我做类似的事情吗? 谢谢! -麦克风 问题答案: 更新: 这是一个如何处理超时的示例: 在IE8中,您可以向对象添加超时事件处理程序。 我建议不要像代码所暗示的那样进行同步

  • 问题内容: 我一直在网上搜索,试图找到一个直接的答案。有谁知道浏览器请求ajax的默认超时时间?还可以通过版本进行更改吗? 问题答案: 我认为浏览器的AJAX没有超时,只有同步或异步请求。同步-首先冻结JavaScript执行,直到请求返回;异步- 不冻结JavaScript执行,仅将请求从执行流中移出;如果您有回调函数,它将与正在运行的脚本并行执行该函数(类似于线程)

  • 当我在chrome上使用ipad时,useragent是 Mozila/5.0(iPad;CPU OS 9_3_5像Mac OS X)AppleWebKit/601.1(KHTML像Gecko)CruiOS/57.0.2987.137 Mobile/13G36.... 问题:因为在iPadOS上,Safari上的用户代理与MacOS笔记本上的相同,遵循https://forums.develope

  • 问题内容: 我是angularjs的新手。如何在angularjs中检测到userAgent。可以在控制器中使用它吗?尝试了以下类似的方法,但是没有运气! 我需要专门检测IE9! 问题答案: 就像Eliran Malka询问的那样,为什么需要检查IE 9? 检测浏览器的品牌和版本通常是一种难闻的气味。通常,这意味着如果您需要JavaScript来检测特定版本的浏览器,则代码会有更大的问题。 在某些

  • 我是新的angularjs。我怎么能检测用户代理在angularjs。有可能在控制器中使用它吗?尝试了下面这样的东西,但没有运气! 我需要专门检测IE9!

  • 问题内容: 如何使用JavaScript确定确切的浏览器和版本? 问题答案: 顾名思义,这将告诉您浏览器提供的名称和版本号。 当您在多个浏览器上测试新代码时,它对于对测试结果和错误结果进行排序非常方便。