一尘不染

检查jQuery ajax请求的状态

ajax

似乎只有在ajax请求能够从服务器获得某些响应时,才会触发成功,错误和完整的回调。

因此,如果我关闭服务器,则不会执行以下错误回调,并且请求将以静默方式失败。

$.ajax({
  type: "GET",
  url: "http://localhost:3000/",
  dataType: "script",
  success: function() {
    alert("success");
  },
  error: function() {
    alert("error");
  }
});

当根本无法访问服务器时,抛出错误的最佳方法是什么。

编辑-从我尝试过的内容来看,似乎jQuery的内置错误处理不适用于JSONP或dataType:“ script”。因此,我将尝试设置手动超时。

编辑-做了一些进一步的研究,看来不仅ajax错误回调不起作用,而且您无法使用dataType脚本或jsonp中止ajax请求,并且这些请求将忽略超时设置。

还有一个替代方法-jquery-
jsonp插件,但它使用了隐藏的iframe,我宁愿避免使用。因此,我决定按照以下建议创建手动超时。如果请求超时,您将无法中止请求,这意味着即使在超时后脚本仍可能加载,但是如果服务器不可用,至少会触发某些事件。


阅读 595

收藏
2020-07-26

共1个答案

一尘不染

您可以使用setTimeout,并clearTimeout在完整的处理程序中将其清除。

var reqTimeout = setTimeout(function()
{
  alert("Request timed out.");
}, 5000);
var xhr = $.ajax({
  type: "GET",
  url: "http://localhost:3000/",
  dataType: "script",
  success: function() {
    alert("success");
  },
  error: function() {
    alert("error");        
  },
  complete: function() {
    clearTimeout(reqTimeout);
  }
});
2020-07-26