jQuery:处理失败的AJAX请求的后备

时间:2009-12-04 01:42:13

标签: jquery ajax json callback wait

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​​请求的方式,包括它的回调函数。但是怎么样?有谁知道怎么做?

5 个答案:

答案 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给出了您需要使用的代码的一个很好的例子。 (甚至在我发表回复之前)