检查返回true失败

时间:2012-05-21 14:31:42

标签: javascript jquery jquery-mobile

我遇到了一个让我失望的问题。这是我的代码:

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

3 个答案:

答案 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();
               .
               .
         }
    });
  });