2015-03-24 2 views
1

Я пытаюсь вызвать запрос JQuery GET на успешное завершение запроса POST. Функции работают, и данные передаются из запроса GET, однако он отвечает перед POST.Вызов jQuery Get after Post

function getCartCount() { 
    var d = new Date().getTime(); 
    $.get("/ajax/countCart.php", { "rand": d }, function(res) { 
     $("#view-cart").text(res);   
     alert(res); 
    }); 
} 

$(".products form img").click(function() { 
    $.post("/ajax/addToCart.php", $(this).parent("form").serialize()) 
    .done(function(data) { 
     alert(data); 
    }) 
    .always(getCartCount()); 
}); 

Приведенный выше код выдает окно предупреждения из запроса GET сначала тогда окно предупреждения от POST, который не является идеальным, как значение от GET зависит от POST завершается первым.

См. http://www.cccomforts.co.uk/small-furries для вывода.

ответ

0

Это потому, что вы не дождались завершения запроса POST. Сделайте это -

$(".products form img").click(function() { 
    $.post("/ajax/addToCart.php", $(this).parent("form").serialize()) 
    .done(function(data) { 
     alert(data); 
     getCartCount(); 
    }) 
}); 
+1

Неверный ответ - правильный ответ - от @Quentin. OP намеревается вызвать 'getCartCount()' в всегда обратном вызове, он просто вызвал функцию вместо передачи ссылки на функцию как аргумент 'always()'. При этом, вероятно, имеет смысл просто положить 'getCartCount()' в выполненный обратный вызов, потому что, похоже, не имеет смысла вызывать этот метод, когда ваш исходный пост не удался. – Adam

+0

OP говорит, что он хочет называть GET успешным завершением POST. Таким образом, лучший способ сделать это - сохранить GET-вызов внутри .done. Вот почему ответ. – Sam

+0

Благодаря @Sam ваше исправление работает, такая простая вещь, чтобы игнорировать, а также! –

2
.always(getCartCount()); 
        ^^ 

Вы сразу же вызвать функцию и передавая возвращаемое значение always.

Удалите (), чтобы передать функцию.

.always(getCartCount);