0

我遇到了一个让我很生气的问题。这是我的代码:

$('.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()) 查看控制台,它显示未定义

4

3 回答 3

4

您不能让函数在异步 AJAX 调用成功时同步返回 true。

像这样将回调作为 ajax 成功函数传递

success: function () {
    var container = $(this).parent();
    container.hide();
    container.next().show();
}
于 2012-05-21T14:35:03.187 回答
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();
}
于 2012-05-21T14:37:18.470 回答
1

为什么不将“if”块的内容作为回调方法发送,以便在 addToCart 中的 ajax 调用成功完成后调用?

所以你的代码看起来更像这样:

$('.somediv').live('click', function() {
   $.ajax({
        .
        .
        success: function() {
              var container = $(this).parent();
               .
               .
         }
    });
  });
于 2012-05-21T14:36:09.087 回答