Метод обратного вызова jQuery пропал после обновления веб-сайта

#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 завершен.