jQuery可以为失败的AJAX调用提供回退吗?这是我的尝试:
function update() {
var requestOK = false;
$.getJSON(url, function(){
alert('request successful');
requestOK = true;
});
if (!requestOK) {
alert('request failed');
}
}
不幸的是,即使调用了$ .getJSON()方法的回调函数,在回调函数有机会设置requestOK变量之前,我得到消息'request failed'。我认为这是因为代码并行运行。有没有办法处理这种情况?我想过链接或某种等待AJAX请求的方式,包括它的回调函数。但是怎么样?有谁知道怎么做?
答案 0 :(得分:74)
您需要使用较低级别的$.ajax电话或ajaxError功能。这是使用$ .ajax方法:
function update() {
$.ajax({
type: 'GET',
dataType: 'json',
url: url,
timeout: 5000,
success: function(data, textStatus ){
alert('request successful');
},
fail: function(xhr, textStatus, errorThrown){
alert('request failed');
}
});
}
编辑我在timeout
电话中添加了$.ajax
并将其设置为5秒。
答案 1 :(得分:9)
Dougs答案是正确的,但您实际上可以使用$.getJSON
并捕获错误(不必使用$.ajax
)。只需调用getJSON
函数链接fail
来电:
$.getJSON('/foo/bar.json')
.done(function() { alert('request successful'); })
.fail(function() { alert('request failed'); });
现场演示:http://jsfiddle.net/NLDYf/5/
此行为是jQuery.Deferred接口的一部分 基本上,它允许您在调用该操作后将事件附加到异步操作,这意味着您不必将事件函数传递给操作。
阅读更多关于jQuery.Deferred的信息:http://api.jquery.com/category/deferred-object/
答案 2 :(得分:2)
是的,它内置于jQuery中。请参阅jquery documentation上的文档。
ajaxError可能就是你想要的。
答案 3 :(得分:1)
我更喜欢这种方法,因为你可以返回承诺并使用.then(successFunction,failFunction);你需要的任何地方。
var promise = $.ajax({
type: 'GET',
dataType: 'json',
url: url,
timeout: 5000
}).then(function( data, textStatus, jqXHR ) {
alert('request successful');
}, function( jqXHR, textStatus, errorThrown ) {
alert('request failed');
});
//also access the success and fail using variable
promise.then(successFunction, failFunction);
答案 4 :(得分:0)
我相信你要找的是jquery ajax object
的错误选项 getJSON是$.ajax
对象的包装器,但它不提供对错误选项的访问。
编辑: dcneiner给出了您需要使用的代码的一个很好的例子。 (甚至在我发表回复之前)