Я использую запросы Ajax через JQuery для обновления некоторых частей веб-страницы.Обработка ответа Ajax прерывается при вложении другого запроса Ajax
В зависимости от значений данных, полученных из первого запроса Ajax, я посылаю (или нет) другой вложенный запрос Ajax, чтобы получить дополнительную информацию. Значение второго запроса Ajax вложен в первый обработчик ответа Ajax. не
В основном:
// Get some information
$.ajax({type: "POST", url: get_some_info_url})
.done(
function(msg)
{
// Given the info contained in msg, let send another request to get more
if(msg.some_info === true)
{
$.ajax({type: "POST", url: get_some_more_info_url})
.done(
function(msg2)
{
// Do something
});
}
// Display "Hello world!" whatever the msg.some_info value is.
$('div#message-id').html("Hello world!");
});
Различные сценарии: "Привет, мир!"
Если msg.some_info является ИСТИНА =>нет отображения из
Если msg.some_info - FALSE =>, отображающий из "Hello world!"
Более странно: если я поставил точку останова в отладчике Firefox на строку, содержащую второй вложенный вызов Ajax (только переступив через вызов $ .ajax в отладчике) и msg.some_info ИСТИНА =>отображения «Привет, мир!»
Я немного смущен здесь. Почему мой второй вызов Ajax предотвращает выполнение остальной части кода первого ответа Ajax? Есть ли какое-то «состояние гонки» или материал для управления сеансом?
И почему нарушение кода «разрешает» проблему?
EDIT: ВОПРОС РЕШЕН. См. Мой ответ.
Благодарим за помощь.
Только возможная причина - ошибка JS в вашем вложенном вызове ajax, останавливающем запуск JS-движка. – RaviH
На несвязанной ноте вы можете использовать [Promise] (http://blog.kevinchisholm.com/javascript/jquery/using-the-jquery-promise-interface-to-avoid-the-ajax-pyramid- of-doom /) в jQuery, чтобы ваш код был чистым. – bzlm
Вы уже определили «ИСТИН»? В синтаксисе javascript не существует 'TRUE', логические значения -' true' и 'false'. Попробуйте написать просто 'if (msg.some_info)'. Чтобы понять, как читать правдивые и ложные выражения в js –