我有以下内容:
$(".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。
答案 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);
});