У меня есть вызов jQuery .ajax:
$j.ajax({
type: "POST",
url: "/Services/Cart.asmx/UpdateQuantity",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
var d = msg.d;
// etc.
},
error: function(xhr, msg) {
var response = JSON.parse(xhr.responseText);
var cart = $j('#cart');
if (response.Message) {
cart.before('<div class="error">' + response.Message + '</div>');
} else {
cart.before(' <div class="error">An unexpected error occurred.</div> ');
}
},
complete: function(request, settings) {
// Some other stuff.
}
}); // end ajax
alert('Initially thought this would be called after above .ajax call complete. But it is not. Rather, it is called before success etc.');
Однако, основываясь на некоторых данных, возвращаемых этим первым вызовом ajax, я хочу инициировать второй вызов .ajax. Тем не менее, похоже, что из-за того, как обратные вызовы настроены для первого, это не происходит последовательно (то есть, где в приведенной выше строке последнего предупреждения («Первоначально ...»)), поэтому я не могу использовать последние обновленные данные DOM на стороне клиента.
Как лучше отправить еще один вызов .ajax? Я быстро провел несколько тестов в рамках всего мероприятия, но это не показалось.
У меня здесь сидит "jQuery в действии", ожидая, что я найду время, чтобы покопаться в нем, чтобы понять больше того, что происходит под капотом, но пока нет времени!
ОБНОВЛЕНИЕ: Эрк. Когда очевидное сначала не работает, как ожидалось, проблема обычно лежит между стулом и монитором; Я положу это на всю ночь пердеть мозг. Оказывается, как я изначально настроил его (вызов второго .ajax-вызова в обратном вызове успеха), очевидно, был правильным, но мой второй .ajax-вызов содержал небольшую синтаксическую ошибку (и, таким образом, потерпел неудачу и отправил меня неправильно) ).
И @kgiannakakis отмечается как ответ, потому что он / она был а) первым и б) при условии, что он умело недооценен: «Вы можете настроить вызов на синхронность, но это не рекомендуемая техника».