Javascript продолжает выполнение после тайм-аута AJAX - как я могу избежать этого? - PullRequest
0 голосов
/ 26 августа 2018

У меня есть страница, на которой данные из формы отправляются в файл PHP.

function save(){

    // Serialize the data in the form
    current = $form.serialize();

    // Fire off the request to /form.php
    request = $.ajax({
        url: "save.php",
        type: "post",
        data: current,
    });

    // Callback handler that will be called on success
    request.done(function (response, textStatus, jqXHR) {
        console.log('saved');

    });
    // Callback handler that will be called on failure
    request.fail(function (jqXHR, textStatus, errorThrown) {
        console.error(
                "The following error occurred: " +
                            textStatus, errorThrown
                            );
    });
}

Это срабатывает каждые 15 секунд и работает хорошо. Однако для того, чтобы отследить любые изменения до того, как люди покинут страницу, я также в данный момент запускаю функцию на beforeunload

$(window).bind('beforeunload', function(){
    save();
});

Опять же, это хорошо работает на локальном хосте в тестовой среде. Однако меня беспокоит то, что если страница save.php недоступна или загрузка результата занимает слишком много времени, пользователь останется на исходной странице, не имея возможности покинуть ее (поведение подтверждается отключением файла PHP в течение 30 секунд).

Я думаю, что мне нужно использовать опцию тайм-аута $ .ajax, чтобы справиться с этой ситуацией, однако я сталкиваюсь с трудностями:

    request = $.ajax({
        url: "save.php",
        type: "post",
        data: current,
        timeout: 6000
    });

Это записывает тайм-аут в консоли при вызове request.fail - однако страница продолжает ждать полных 30 секунд, в течение которых PHP-файл спит.

Я бы хотел, чтобы страница перенаправлялась или закрывалась так, как первоначально хотел пользователь, через 6 секунд, даже если сохранение еще не завершено. Я пытался использовать abort() на request и jqXHR без хорошего результата. Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...