2013-02-18 35 views
5

据我所知the documentation,有两种不同的方式来处理来自$.ajax()调用的响应。jquery ajax:何时使用回调钩子vs设置函数?

1)带通入$.ajax()的设置功能对象:

$.ajax({ 
    success: function(){ ... }, 
    error: function(){ ... } 
}); 

2)环连接“回调挂钩”

$.ajax({...}) 
    .done(function(){ ... }) 
    .fail(function(){ ... }) 

之间有什么重要的区别这两种方法,我应该什么时候选择一种?

回答

1

如果您在呼叫中直接附加该功能,则使用情况没有太大区别。当你想在其他地方使用回调函数时会产生差异。

发送回调函数进入一个方法:

function callForMe(callback) { 
    $.ajax({ 
    url: '...', 
    success: callback 
    }); 
} 

callForMe(function(data){ 
    // handle the response 
}); 

返回从方法的承诺,等待以后的响应:

function callFormMe() { 
    return $.ajax({ 
    url: '...' 
    }); 
} 

var promise = callForMe(); 
// later on: 
promise.done(function(data){ 
    // handle the response 
}); 
+0

回想起来,这应该是显而易见的,我想......但感谢您的清晰解释和例子。 – 2013-02-18 22:48:20

1

总是使用新的延迟对象(即可链式的.done,.fail等)版本,尽管在很多情况下没有代码长度的保存。

原因是它允许我从去耦合从后续处理响应中产生AJAX调用的细节。

解耦允许我:

  1. 抽象掉数据从数据处理获取
  2. 添加多个处理程序,即使在AJAX调用完成
  3. 使用.fail上没有这样的AJAX辅助处理器error:参数
  4. 使用.pipe在将数据传递给其他处理程序之前对其进行后处理
  5. 同步与其他异步事件的onise

和所有没有必要直接传递回调到AJAX调用。

请参阅this answer其中我给出了更多具体实例的好处。

+0

只是要评论并问@Guffa是否同意这个约定。对我而言,记忆一种用法比两种用法要容易得多。 你能想到任何会对其他方法有明显益处的情况吗?如果没有,我会和你一起上船。 – 2013-02-18 22:52:40

+0

延迟方法对旧风格有许多好处,它可以让你做一些你无法轻易处理的旧成功风格处理程序。 – Alnitak 2013-02-18 22:54:39

+0

太好了,刚刚阅读[你的其他答案](http://stackoverflow.com/a/14754681/6782)​​太(+1),好东西。 TIL – 2013-02-18 22:55:17