2012-05-21 3 views
0

У меня проблема, которая меня убивает. Вот мой код:Check return true fail

$('.somediv.btn-2').live('click', function() { 
    if (addToCart()) { 
     var container = $(this).parent(); 
     container.hide(); 
     container.next().show(); 
    } 
}); 

function addToCart() { 
    // ... 
    return true 
} 

По какой-то причине контейнер никогда не скрывается.

Хотя, если я просто спрячу его без if(), он работает. Функция выполняет вызов AJAX и возвращает true при успешном завершении. Когда я смотрю на призывы, они верят успех, поэтому он должен возвращать истину.

Большое спасибо.

EDIT: Я попытался, глядя на консоли с console.log (AddToCart()), и это показывает неопределенными

+0

вам нужна точка с запятой после 'возврата true' – SomeKittens

+1

Как может ваша AddToCart функция возвращает синхронно истинны на успехе? Это не кажется возможным ... –

+0

Итак, вы говорите, что addToCart() действительно возвращает TRUE? –

ответ

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(); 
} 
+0

Спасибо. Это исправлено. – boruch

+0

Почему woudln't async возвращает true? – boruch

+0

Начальный поток выполняется до завершения асинхронной операции, поэтому возвращаемое значение не определено. – mVChr

4

Вы не можете иметь функция, возвращающая синхронно истинна на успех асинхронного вызова AJAX.

Pass обратного вызова как функции Ajax успеха, как этот

success: function() { 
    var container = $(this).parent(); 
    container.hide(); 
    container.next().show(); 
} 
1

Почему бы не просто отправить содержимое «если» блока как метод обратного вызова для вызова после того, как Ajax вызова в AddToCart закончена на успех?

Так что ваш код будет выглядеть следующим образом:

$('.somediv').live('click', function() { 
    $.ajax({ 
     . 
     . 
     success: function() { 
       var container = $(this).parent(); 
       . 
       . 
     } 
    }); 
    });