jQuery ajax:请求失败时调用完成

时间:2013-02-26 09:12:19

标签: jquery ajax promise

我尝试使用promises同步我的ajax请求: 我目前的代码很简单:

    var ajax = undefined;

    $.ajax({
                type: 'put',
                url: url,
                data: data,
                cache: false,
                successs: function () {

                },
                error: function () {

                }

            }).done(function () {
                alert('done');
            });

只要ajax调用成功(状态代码200),但是当调用失败时(例如显示无效的url),这样就可以正常工作了,不再调用已完成的操作。 即使ajax请求失败=

,如何执行done

的Stefan

3 个答案:

答案 0 :(得分:5)

为您提供几种选择:

成功或失败时调用相同的功能。函数不具有是匿名的并且是内联定义的,您可以使用名称单独定义它们并相应地引用它们。

在您的代码段中,您使用的是较早的success(虽然末尾有额外的s)和error 以及较新的{{ {1}},这意味着您要为成功定义两个不同的回调(donesuccess)。只需一个即可。

以下是使用donesuccess的示例,将error传递到null上的处理程序中:

error

或使用var ajax = undefined; $.ajax({ type: 'put', url: url, data: data, cache: false, success: handler, error: function() { handler(null); } }); function handler() { alert("Done"); } done

fail

或者(或组合),有var ajax = undefined; $.ajax({ type: 'put', url: url, data: data, cache: false }).done(handler).fail(function() { handler(null); }); function handler() { alert("Done"); } 回调(您在选项中指定的回调)和complete回调(alwaysdone样式) ,无论成功或失败,都会被调用(在成功或失败回调完成之后):

fail

complete

var ajax = undefined; $.ajax({ type: 'put', url: url, data: data, cache: false, success: handler, error: function() { handler(null); }, complete: function() { alert("Always called (after success/error)"); } }); function handler() { alert("Done"); }

always

答案 1 :(得分:0)

您可以使用done设置:

,而不是complete功能
$.ajax({
    type: 'put',
    url: url,
    data: data,
    cache: false,
    successs: function () {

    },
    error: function () {

    }
    complete: function(jqXHR, textStatus) {
        alert("Done");

});

complete函数在successerror之后执行。有关详细信息,请查看jQuery ajax文档。

如果您不关心实际的successerror回调,并且只想在调用完成后执行某些操作,无论结果如何,请忽略success和{{1}完全设置。

答案 2 :(得分:0)

没有必要完成

 $.ajax({
    type: 'post',
    url: url,
    data: data,
    cache: false,
    success: function () {
       alert('success');
    },
    error: function () {
       alert('error');
    },
    complete: function(){
       alert('complete');
    }
 });