синхронный http-запрос jquery ajax

#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 и просто использовать любой упреждающий выход, который вы получаете при выгрузке, в качестве бонуса , а не чего-либо, на что вы действительно полагаетесь.