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

如何在浏览器中检测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中,您可以向对象添加超时事件处理程序。 我建议不要像代码中所暗示的那样进行同步调用,也建议使用javascript框架来做

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

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

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

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

  • 问题内容: 有什么方法可以使用React检测IE浏览器并重定向到页面或提供任何有用的信息。我在JavaScript中找到了一些东西,但不确定如何将其与React + TypeScript一起使用。 问题答案: 您走在正确的轨道上,可以使用它们有条件地渲染jsx或帮助进行路由… 我已经成功地使用了以下内容。 请注意,由于浏览器的更改,它们每个都有机会被弃用。 我在React中这样使用它们: 然后通过