我遇到了一个让我失望的问题。这是我的代码:
$('.somediv.btn-2').live('click', function() {
if (addToCart()) {
var container = $(this).parent();
container.hide();
container.next().show();
}
});
function addToCart() {
// ...
return true
}
由于某种原因,容器永远不会被隐藏。
虽然我只是在没有if()
的情况下将其隐藏起来。该函数进行AJAX调用并在成功时返回true
。当我查看调用时,它们会返回成功,因此它应该返回true。
非常感谢。
编辑: 我尝试使用console.log(addToCart())查看控制台,它显示未定义的
答案 0 :(得分:4)
在异步AJAX调用成功时,不能让函数同步返回true。
将回调作为ajax成功函数传递,如此
success: function () {
var container = $(this).parent();
container.hide();
container.next().show();
}
答案 1 :(得分:2)
由于您的addToCart()
函数是异步的,因此您需要使用回调而不是返回值。您的代码应如下所示:
$('.somediv.btn-2').live('click', function() {
addToCart(function() {
var container = $(this).parent();
container.hide();
container.next().show();
});
});
function addToCart(successCallback) {
// instead of return true you'd have
successCallback();
}
答案 2 :(得分:1)
为什么不在发送成功完成addToCart中的ajax调用后,将“if”块的内容作为回调方法发送?
所以你的代码看起来更像是这样:
$('.somediv').live('click', function() {
$.ajax({
.
.
success: function() {
var container = $(this).parent();
.
.
}
});
});