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(...); не работал

Другие вопросы по тегам