gpt4 book ai didi

jQuery.ajax -always() 并不总是运行

转载 作者:行者123 更新时间:2023-12-03 22:32:09 28 4
gpt4 key购买 nike

我正在使用 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.com 的控制台中运行它,该网站使用 jQuery 1.9.1。我使用 jQuery 1.11.1 也有同样的行为。我总是需要触发来处理 url 不可用的情况。我在 IE11、Chrome 38 和 FF 33 中遇到相同的行为。我做错了什么还是这是一个错误?谢谢。

最佳答案

这是众所周知的 JSONP 调用。根据$.ajax 错误引用:

Note: This handler is not called for cross-domain script and cross-domain JSONP requests.

另请注意,不支持同步 JSONP 调用:

Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation.

解决方法通常涉及 1) 设置调用超时或 2) 使用插件添加更典型的错误功能。

1) 设置超时(和 async true)

var jqXHR = jQuery.ajax({
type: 'GET',
async: true,
cache: false,
url: 'http://ip.jsontest.com.BADURL/',
contentType: 'application/json; charset=UTF-8',
crossDomain: true,
dataType: 'jsonp',
timeout: 2000
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log('fail was called');
})
.done(function (data, textStatus, jqXHR) {
console.log('Your IP is ' + data.ip);
console.log('done was called');
})
.always(function (dataOrjqXHR, textStatus, jqXHRorErrorThrown) { console.log('always was called'); });

2) jQuery JSONP plugin它添加了错误恢复功能。

关于jQuery.ajax -always() 并不总是运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26980373/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com