Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
后处理jQuery ajax请求结果的最简单方法?_Jquery_Jquery Deferred - Fatal编程技术网

后处理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);
});