5

据我从文档中可以看出,有两种不同的方式来处理来自$.ajax()呼叫的响应。

1) 将函数传递给$.ajax()的设置对象:

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

2) 作为可链接的“回调钩子”

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

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

4

2 回答 2

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
});
于 2013-02-18T22:43:30.363 回答
1

总是使用新的延迟对象(即 chainable.done.fail)版本,即使在许多情况下没有节省代码长度。

原因是它允许我将进行 AJAX 调用的细节与响应的后续处理分离。

解耦使我能够:

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

并且无需将回调直接传递给 AJAX 调用。

请参阅这个答案,我在其中给出了更具体的好处示例。

于 2013-02-18T22:49:39.360 回答