#php #javascript #jquery #ajax
#php #javascript #jquery #ajax
Вопрос:
я использую ajax и jquery для отправки http-запроса * synchonou * s к php-скрипту в веб-приложении для выхода пользователя, если пользователь решит покинуть страницу, а не выйти из системы.
я использую следующий код:
function close()
{
return "If you exit you will be logged out ...!";
}
window.onbeforeunload = close;
$(window).unload( function () {
$.ajax({
url: "logout.php",
async:false,
success: function(msg){
alert( "You have been logged out ...!");}
});
});
ajax работает во ВСЕХ случаях, кроме того, когда я нажимаю кнопку «Назад». Когда я нажимаю кнопку «Назад», я даже запускаю функцию успеха, но когда я проверяю, что php-скрипт не запущен, поскольку в нем есть функция fwrite, которая сообщает мне, что это сработало.
он работает и в других случаях, кроме кнопки «Назад».
Ответ №1:
я использую ajax и jquery для отправки асинхронного http-запроса
Запрос в коде, который вы процитировали, является синхронным, а не асинхронным.
Если вы видите, что success
функция вызывается, когда вы не видите запущенный PHP-код, это означает, что ваш браузер кэшировал предыдущий результат и повторно использовал его. Вы можете обойти это, добавив cache: false
в параметры вашего запроса.
Комментарии:
1. я только что попытался добавить кэш: false, это не сработало. может ли это иметь какое-либо отношение к тому факту, что когда я нажимаю назад, он возвращается к другому php-скрипту?
2. @user: Если вы действительно видите, что вызывается
success
функция, но вы действительно не видите записанную строку из вашего PHP, я не вижу другого варианта, кроме того, что браузер использовал кэшированный ответ или (приносим извинения), что вы неправильно наблюдаете. В любом случае, выполнение чего-либо при выгрузке страницы крайне ненадежно (этот код не будет делать то, что вы хотите в Safari, Opera, IE9, prob. другие), поэтому я предполагаю, что у вас должен быть запасной вариант (тайм-аут и т.д.). Я бы рекомендовал не использоватьalert
и просто использовать любой упреждающий выход, который вы получаете при выгрузке, в качестве бонуса , а не чего-либо, на что вы действительно полагаетесь.