У меня есть страница, на которой данные из формы отправляются в файл 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
без хорошего результата. Что я делаю не так?