【发布时间】:2014-11-18 04:19:51
【问题描述】:
我正在使用 jQuery.ajax 进行 REST 调用并检索一些 JSON。它按预期工作。但是,当我强制执行错误条件(例如 URL 无效)时,always 方法不会触发。如果我设置 crossDomain=false 或 dataType='json',那么总是会触发。但是,我不能在我的生产代码中这样做。如果您设置 url='http://ip.jsontest.com/' 则始终触发。我创建了一个小例子来说明这个问题:
var jqXHR = jQuery.ajax({
type: 'GET',
async: false,
cache: false,
url: 'http://ip.jsontest.com.BADURL/',
contentType: 'application/json; charset=UTF-8',
crossDomain: true,
dataType: 'jsonp'
})
.done(function (data, textStatus, jqXHR) {
console.log('Your IP is ' + data.ip);
console.log('done was called');
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log('fail was called');
})
.always(function (dataOrjqXHR, textStatus, jqXHRorErrorThrown) { console.log('always was called'); });
您可以在使用 jQuery 1.9.1 的 jquery.com 的控制台中运行它。我使用 jQuery 1.11.1 有同样的行为。当 url 不可用时,我总是需要触发以处理时间。我在 IE11、Chrome 38 和 FF 33 中得到了相同的行为。我做错了什么还是这是一个错误? 谢谢。
【问题讨论】: