43

jQuery 能否为失败的 AJAX 调用提供回退?这是我的尝试:

function update() {
    var requestOK = false;

    $.getJSON(url, function(){
        alert('request successful');
        requestOK = true;
    });

    if (!requestOK) {
        alert('request failed');
    }
}

不幸的是,即使调用了 $.getJSON() 方法的回调函数,我也会在回调函数有机会设置 requestOK 变量之前收到消息“请求失败”。我认为这是因为代码并行运行。有没有办法处理这种情况?我考虑过链接或等待 AJAX 请求的某种方式,包括它的回调函数。但是怎么做?有谁知道这是怎么做到的吗?

4

5 回答 5

89

您将需要使用较低级别的$.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通话中添加了一个并将其设置为五秒。

于 2009-12-04T01:54:07.490 回答
13

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/

于 2012-12-05T13:53:18.287 回答
2

是的,它内置在 jQuery 中。请参阅jquery 文档中的文档

ajaxError 可能是你想要的。

于 2009-12-04T01:49:55.907 回答
2

我更喜欢这种方法,因为您可以返回承诺并使用 .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);
于 2017-12-22T19:21:47.057 回答
1

我相信您正在寻找的是 jquery ajax 对象的错误选项

getJSON 是$.ajax对象的包装器,但它不提供对错误选项的访问权限。

编辑: dcneiner 给出了您需要使用的代码的一个很好的例子。(甚至在我发表回复之前)

于 2009-12-04T01:56:32.463 回答