jquery - 使用Defferred.then()将一些已解决的案例过滤为拒绝的案例

标签 jquery jquery-deferred jquery-1.8

我正在执行一个 ajax 调用,它可以返回 {status: ok}{status: error} 以及其他数据。

我想做一个 .then(doneFilter) 来检查 status 成员,然后修改一些内容,以便仅当状态为 Deferred 时才会解析没问题。

我不确定其语法。有人可以给我写一个例子吗?

最佳答案

这是一个典型的例子:

/*  Returns a deferred object.  It is resolved if the ajax call succeeded, and
    is rejected otherwise.
*/
function doAjaxThing() {
    var df = $.Deferred();
    $.ajax('http://someurl.org/path/whatever').done( function(data) {
        if('test for success here')
            df.resolve();
        else
            df.reject();
    }).fail( function() {
        df.reject();
    });

    return df;  
}

doAjaxThing().then( 
    function() { 'success!'; },
    function() { 'failure.'; }
);

重要的是,您不仅要处理成功案例,还要处理失败案例。您的 ajax 调用有两种失败的可能:请求返回 {status: error} 或请求本身由于某种服务器错误而失败。

您还有其他选择。您可以将解析/拒绝调用中的数据传递给处理程序。您还可以使用 acceptWith()rejectWith() 将上下文(this 对象)传递给您的处理程序。

我建议您阅读deferred object documentation如果您还没有的话。

关于jquery - 使用Defferred.then()将一些已解决的案例过滤为拒绝的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609539/

相关文章:

javascript - 触发取消选中对复选框不起作用

jQuery UI 对话框边框在 1.12.1 中不再工作

jquery - 如何将所有处理程序从一个延迟转移到另一个?

javascript - jQuery 中的多个同时 Ajax 请求(带有一个回调)

jQuery 1.8 查找事件处理程序

jquery - 使用 jquery 查找最后一个 child

Android - Chrome SlideToggle 在滚动时关闭

jQuery 延迟和 promise - .then() 与 .done()

javascript - jQuery 1.8 : unsupported pseudo: hover

javascript - jQuery 选择器 : how can I specify one select menu when I have more than one?