检查jQuery ajax请求的状态

Set*_*own 9 ajax jquery jsonp

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

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

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

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

编辑 - 从我的尝试和阅读看来,jQuery的内置错误处理似乎不适用于JSONP或dataType:"script".所以我要尝试设置手动超时.

编辑 - 做了一点研究,看起来不仅ajax错误回调不起作用,而且你不能用dataType脚本或jsonp中止ajax请求,这些请求忽略超时设置.

有一个替代方案 - jquery-jsonp插件,但它使用隐藏的iframe,我宁愿避免.所以我已经决定创建一个手动超时,如下所示.如果请求超时,则无法中止请求,这意味着即使在超时后脚本仍可能仍然加载,但如果服务器不可用,则至少会触发某些内容.

Mat*_*hen 8

您可以使用a 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);
  }
});
Run Code Online (Sandbox Code Playgroud)


Eva*_* Wu 5

jQuery.ajax已经有一个timeout首选项,如果请求超时,它应该调用你的错误处理程序.查看精彩的文档说 - 我在这里引用它,强调我的:

timeoutNumber

为请求设置本地超时(以毫秒为单位)...

和:

error (XMLHttpRequest, textStatus, errorThrown) Function

请求失败时要调用的函数.该函数传递三个参数:XMLHttpRequest对象,描述发生的错误类型的字符串和可选的异常对象(如果发生).第二个参数的可能值(除了null)是"timeout","error","notmodified"和"parsererror".这是一个Ajax事件.

  • 对于JSON-P,尝试一个名为`jquery-jsonp`的项目. (2认同)