#jquery #ajax
#jquery #ajax
Вопрос:
Если я нажму кнопку обновления в Chrome до того, как мой ajax завершится успешно, обратный вызов complete: function(data){ doSomething()}
не будет вызван.
function startMockServer() {
$.ajax({
url: "/mocks/[[${id}]]/start",
type: "POST",
success: function(result) {
},
error: function(xhr, status, error) {
},
complete: function(data) {
getMockStatusAndUpdateView()
}
});
updateMockServerStatusView("STARTING")
}
Есть ли какой-либо способ сохранить этот обратный вызов ajax, даже если я обновляю веб-сайт?
Комментарии:
1. Когда вы закрываете / обновляете вкладку, браузер завершает все задачи, поэтому передача данных будет прервана, хотя вы можете сохранить флаг в
localstorage
перед запуском запроса AJAX и отключить его после успеха, я не вижу в этом никакой пользы, кроме обнаружения того, что AJAX был заблокирован, в любом случае вы не сможете восстановить ответ, поскольку запрос так и не был завершен.2. Не используя javascript — вы могли бы использовать серверное решение, такое как websockets, и повторно подключиться при загрузке страницы.
Ответ №1:
Невозможно сохранить функцию обратного вызова при обновлении веб-сайта.
Функция, объявленная в разделе ajax complete, будет выполняться только тогда, когда страница, на которую был создан запрос, все еще активна и не перезагружена, и вызов ajax завершен.