将参数传递给$ .then函数

时间:2013-07-23 14:53:48

标签: jquery jquery-deferred

我有以下内容:

$(".remove-item").click(function(e) {
    e.preventDefault();

    var url = $(this).attr('href');
    var id = $(this).data("id");
    $.when(removeItem(url))
      .then(removeItemResponse(id));
});

var removeItemResponse = function(data, id) {
   console.log(data);
   console.log(id);
};

var removeItem = function(url) {
  return $.post(url);
};

以上是行不通的,因为我在处理ajax请求后没有在日志中得到任何东西,我知道它与我如何处理removeItemResponse中的参数有关。我需要使用来自ajax帖子的返回数据,但也传递我在click函数中检索到的id。

2 个答案:

答案 0 :(得分:10)

removeItemResponse(id)正在立即执行该函数,并且您没有传递第一个延迟的结果。试试这个:

.then(function(data) { removeItemResponse(data, id) });

done()也适用于此:

.done(function(data) { removeItemResponse(data, id) });

您可以简化和处理类似的失败:

removeItem(url)
    .done(function(data) { removeItemResponse(data, id) });
    .fail(function(result) { /* do something else */ });

答案 1 :(得分:2)

当你/他们滥用时,他们不适用于此。只需对.done返回的承诺使用removeItem即可。它将传递AJAX请求的结果(假设它返回由$.ajax调用等返回的promise),然后您可以将该结果和id传递给您的处理函数:

removeItem(url).done(function (data) {
  removeItemResponse(data, id);
});
相关问题