JQuery onunload() AJAX без асинхронности: ложь
На определенной странице при определенных условиях мне нужно запустить оператор обновления в SQL на странице выгрузки. Это должно быть завершено, прежде чем пользователь перейдет на следующую страницу. Я использую JQuery 1.8.3. Вот где я начал:
$(window).unload(function() {
$.ajax({
type: "POST",
cache: false,
url: "myScript.php",
data: ({ /* my data */ }),
success: function(result) { /* do nothing */ },
error: function(data) { location.reload(); }
});
});
При использовании этого метода оператор обновления не выполнялся. Читая его, я попробовал "async: false", который сначала не решал мою проблему, пока я не проверил свою таблицу и не увидел, что значение обновляется (только после добавления "async: false"). Согласно дальнейшему прочтению, "async: false" устарела в JQuery 1.8, но все еще работает для выполнения оператора update. Проблема в том, что оператор обновления не завершает выполнение до тех пор, пока операторы выбора следующей страницы не будут выполнены, поэтому данные устарели, если пользователь не обновит страницу. Это из-за частичной поддержки async: false в 1.8, медленного выполнения записи в db или быстрого выполнения чтения из db, какой-то другой проблемы с задержкой или??? Может быть, следующий HTTP-запрос проходит, хотя событие unload удерживает пользователя на странице?
1 ответ
Решил:
$(window).on('beforeunload', function() {
$.ajax({
type: "POST",
async: false,
cache: false,
url: "myScript.php",
data: ({ /* my data */ }),
success: function(result) { /* do nothing */ },
error: function(data) { location.reload(); }
});
});
$ (Окна).onbeforeunload(...); не работал