似乎只有在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,我宁愿避免.所以我已经决定创建一个手动超时,如下所示.如果请求超时,则无法中止请求,这意味着即使在超时后脚本仍可能仍然加载,但如果服务器不可用,则至少会触发某些内容.
解决方法
您可以使用
setTimeout
,并在完整的处理程序中使用
clearTimeout
清除它.
var reqTimeout = setTimeout(function() { alert("Request timed out."); },5000); var xhr = $.ajax({ type: "GET",error: function() { alert("error"); },complete: function() { clearTimeout(reqTimeout); } });