jQuery AJAX或XHR请求触发器未能完成回调的回调

在完成jQuery XHR的处理程序(从$ .get()调用创建)中找到方法来查找响应中的问题,然后使用自定义错误消息触发注册的后续处理程序(谎言失败和总是)?

像这样的东西:

$.get( URL )
.done(
    function (data, status, res) {
    if(/*some condition*/){
            this.Reject(res, status, "some reason");
            return    
        }
    //Do stuff on success
    }
)

.fail(
//Common error handler here
)
.always(
    //common always handler here
);

完成一种辅助过滤器。 原因当然是所有的API在200响应中推送错误,jQuery永远不会知道这是一个错误。


我想出了如何做到这一点,它很好地工作:

$.get( URL )
.then(
    function (data, status, res) {
        if(/**some error check**/({
             return $.Deferred().reject(res, status, "error message");
        }

        return $.Deferred().resolve(data, status, res);
    }
)
.done(
    function (data, status, res) {
        //Do stuff on success
    }
)

.fail(
//Common error handler here
)
.always(
    //common always handler here
);

像魅力一样工作,现在我没有在我完成的混乱的数据错误处理,我可以专注于处理数据或设置错误消息。


感谢这个问题,克里斯的回答。

我试过这个,它的工作原理,除了它触发了一个隐式的意外异常(由一个bug引起)的失败函数,而不是我的测试AJAX异常。 这让我想到,它可能适用于明确的异常,而无需创建新的承诺对象。 所以我尽管我会尝试一个明确的投掷 - 它的工作。

这个明确的投掷在jQuery 3中起作用。我不确定早期版本。 我想在一个这样done处理程序,并没有奏效:扔似乎只在工作then处理

$.get( URL )
.then(
    function (data, status, res) {
        if(/**some error check**/({
             throw "error message";
        }

        return data; //this is also important
    }
)
.done(
    function (data, status, res) {
        //Do stuff on success
    }
)

.fail(
//Common error handler here
)
.always(
    //common always handler here
);
链接地址: http://www.djcxy.com/p/72963.html

上一篇: jQuery AJAX or XHR request trigger fail callbacks from done callback

下一篇: Include server side properties not mapped to entity framework entity