6

我有以下内容:

$(".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。

4

2 回答 2

12

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 */ });
于 2013-07-23T14:57:02.340 回答
2

您在何时/那时滥用,它们不适用于这里。只需使用.doneremoveItem. 它将传递 AJAX 请求的结果(假设它返回由$.ajax调用等返回的承诺),然后您可以将该结果和 id 传递给您的处理函数:

removeItem(url).done(function (data) {
  removeItemResponse(data, id);
});
于 2013-07-23T14:58:27.093 回答