0

我正在尝试使用 Promise 同步我的 ajax 请求:我当前的代码很简单:

    var ajax = undefined;

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

                },
                error: function () {

                }

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

只要 ajax 调用成功(状态码 200),它就可以正常工作,但是当调用失败(例如,无效的 url)时,不再调用 done。即使ajax请求失败,我如何执行完成=

斯特凡

4

3 回答 3

5

几个选项供您选择:

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

在您的代码段中,您同时使用了旧的success(尽管最后有一个额外s的)和error done,这意味着您定义了两个不同的成功回调(successdone)。一个就足够了。

这是一个使用successand的示例error,传递null给 on 处理程序error

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false,
    success: handler,
    error:   function() {
        handler(null);
    }
});

function handler() {
    alert("Done");
}

或使用doneand fail

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false
}).done(handler).fail(function() {
    handler(null);
});

function handler() {
    alert("Done");
}

或者(或组合),有complete回调(您在选项中指定的那个)和always回调(在doneandfail样式中),无论成功或失败(在成功或失败回调完成后)都会调用它们:

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

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false
}).done(handler).fail(function() {
    handler(null);
}).always(function() {
    alert("Always called (after done/fail)");
});

function handler() {
    alert("Done");
}
于 2013-02-26T09:13:51.827 回答
0

done您可以使用complete设置代替功能:

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

    },
    error: function () {

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

});

complete函数在successor之后执行error。查看jQuery ajax文档以获取更多详细信息。

如果您不关心实际successerror回调,并且只想在调用完成后执行某些操作,而不管结果如何,则完全省略successerror设置。

于 2013-02-26T09:16:23.513 回答
0

没有必要做

 $.ajax({
    type: 'post',
    url: url,
    data: data,
    cache: false,
    success: function () {
       alert('success');
    },
    error: function () {
       alert('error');
    },
    complete: function(){
       alert('complete');
    }
 });
于 2013-02-26T09:17:08.103 回答