Учитывая, что ОП разъяснил в разделе комментариев, что «проблема» заключается в следующем: отправка XHR последовательно один за другим, я добавляю второй ответ о том, как этого добиться, но сначала я попытаюсь объясните вкратце, почему добавление вызова $ .post после другого не работает.
XMLHTTPRequests по умолчанию асинхронны. Это заставляет вас думать в асинхронной области и предполагать, что вызов:
asyncFunction1() ($.post)
asyncFunction2() ($.post)
не означает, что asyncFunction2 будет выполняться, когда asyncFunction1 завершит свое выполнение
- Это не означает, что JavaScript является параллельным - многопоточным. JavaScript является однопоточным и асинхронным, для разрешения выполнения кода используется событие l oop. Подробнее об этом здесь .
- Ajax (XMLHTTPRequests - $ .post) - это функция, определяемая браузером c ... Браузер может открывать отдельный поток по порядку отправить запрос, но это не имеет большого значения, потому что помните, что на уровне языка программирования (JavaScript) у нас нет потоков.
Странно верно, так что вернемся к вопросу, что если мы хотим выполнить код сразу после завершения асинхронной функции?
Для этого есть несколько шаблонов:
- Обратные вызовы
- Promises
- Async / Await
И, как правило, асинхронная функция должна предоставить вам API для этого, по крайней мере, хороший старый обратный вызов.
Согласно jQuery .post ($ .post) документации , вы можете добавить обратный вызов, например:
$.post('url', data).done(function (response1) {
// Next code here
})
, что приведет вам:
$.post('url1', data1).done(function (response1) {
// The first XHR finished successfully, we send the second
$.post('url2', data2).done(function (response2) {
$.post('url2', data2).done(function (response2) {
// The second XHR finished successfully, we send the third and so on
$.post('url3', data3).done(function (response3) {...})
})
})
})
Что в конечном итоге заставит вас сказать
«Вложение кода не хорошо, хорошо и легко поддерживать, как я могу сделать его чище? "
Поздравляем, вы вошли в домен Callback Hells