将参数传递给 $.then 函数

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 post返回的数据,同时还要传递click函数中检索到的id。

removeItem 定义在哪里? - marteljn
你已经展示了除removeItem之外的所有内容,你能演示一下吗? - Jonast92
我认为 removeItem 并不相关。知道它如何定义并不能帮助将 id 传递到 .then 回调函数。 - Kevin B
我添加了removeItem函数,但我不认为它真的很重要。 - Gregg
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 */ });

2

您正在滥用 when/then,它们在这里不适用。只需在从 removeItem 返回的 promise 上使用 .done。它将传递 AJAX 请求的结果(假设它返回了类似于 $.ajax 调用返回的 promise),然后您可以将该结果和 id 传递给处理函数:

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

我想要一个单独的函数来处理非200状态响应,并且它在这方面是有效的。那么我如何“滥用”它? - Gregg
当/然后有特定的目的,而这不是它的用途。您发布的代码可以通过单个.done实现。 - user229044

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接