后处理jQuery ajax请求结果的最简单方法?
假设我有一个函数后处理jQuery ajax请求结果的最简单方法?,jquery,jquery-deferred,Jquery,Jquery Deferred,假设我有一个函数fancyParse,用于接收服务器返回的响应并将其转换为其他内容。如果响应毫无意义,或者设置了特殊的“内部错误”标志,则此函数将抛出 我想将此函数链接到一个$中。post调用可获得一个新的延迟。如果请求失败,或者fancyParse抛出,这个新的延迟将失败。如果请求成功并且fancyParse成功,那么它将成功,重要的是,它将把fancyParse的结果传递给它的成功回调 完美的解决方案如下所示: $.post('/url'等).后处理(fancyParse) .done(我的
fancyParse
,用于接收服务器返回的响应并将其转换为其他内容。如果响应毫无意义,或者设置了特殊的“内部错误”标志,则此函数将抛出
我想将此函数链接到一个$中。post
调用可获得一个新的延迟
。如果请求失败,或者fancyParse
抛出,这个新的延迟将失败。如果请求成功并且fancyParse
成功,那么它将成功,重要的是,它将把fancyParse
的结果传递给它的成功回调
完美的解决方案如下所示:
$.post('/url'等).后处理(fancyParse)
.done(我的处理程序已完成)
.fail(我的\u fail \u处理程序);
像这样的东西已经可用了吗,或者我需要自己编写这样的
后处理程序吗?dataFilter
函数可以用来处理数据。你把它和你的要求一起传递
您可以创建自己的延迟对象:
$.postProcess = function(addr,test) {
var dfd = $.Deferred(); // create deferred object
$.post(addr) // make ajax call
.success( function(response) { // if ajax is OK
if (test) { // Your filter test
dfd.resolve("OK"); // if test is passed, call done()
} else {
dfd.reject("Bad test"); // otherwise call reject
}
})
.error(function() { // on ajax error
dfd.reject("Error"); // reject
});
return dfd.promise(); // return deferred object
};
//$.postProcess('/echo/json/',true) // to test good case
//$.postProcess('/echo/json/',false) // to test bad test
$.postProcess('/echo/error/',true) // to test bad ajax
.done( function(msg){
alert('ok:'+msg);
})
.fail( function(msg){
alert('fail:'+msg);
});
文档中没有说明这一点,但您可能知道:过滤函数中的异常是否会导致请求被视为失败?对不起,我不知道。但是为什么不捕获异常,然后从后处理器中调用错误处理程序呢?因为这不仅仅是调用错误处理程序。我还需要将延迟的也被拒绝,以便随后添加的任何错误处理程序也被调用。确认:如果抛出,将按预期调用失败处理程序。这当然是实现我想要的最简单的方法。这似乎有一个问题,因为它与管道的结果有关。如果您添加了一个数据过滤器,下一个延迟对象将不会被传递任何参数。感谢您的努力,我已经+1了。我想我会用它来做我想做的其他事情,但是对于后处理的事情,dataFilter
是完美的。是的,在这种情况下,dataFilter应该比deferred短。但对于某些应用程序来说,延迟可能是一种非常方便的方式。谢谢。
$.postProcess = function(addr,test) {
var dfd = $.Deferred(); // create deferred object
$.post(addr) // make ajax call
.success( function(response) { // if ajax is OK
if (test) { // Your filter test
dfd.resolve("OK"); // if test is passed, call done()
} else {
dfd.reject("Bad test"); // otherwise call reject
}
})
.error(function() { // on ajax error
dfd.reject("Error"); // reject
});
return dfd.promise(); // return deferred object
};
//$.postProcess('/echo/json/',true) // to test good case
//$.postProcess('/echo/json/',false) // to test bad test
$.postProcess('/echo/error/',true) // to test bad ajax
.done( function(msg){
alert('ok:'+msg);
})
.fail( function(msg){
alert('fail:'+msg);
});