2014-11-07 9 views
0

У меня есть функция выхода из системы, которая вызывается в двух разных событиях. Один из них - событие разгрузки, другое - событие щелчка. Если я выгружаю или обновляю страницу, вызывается функция и пользователь выходит из системы. Однако, когда я нажимаю кнопку выхода, функция не вызывается. Может ли кто-нибудь объяснить, почему?Функция, работающая в событии разгрузки, но не в событии click

JS

var loc = "../pages/logged_out.php"; 
    function logout(location){ 
     $.post("../php/logout.php", {}, function(response){ 
      if(response.success == "1"){ 
       location.replace(location); 
      } 
     }, "json"); 
    } 

    $("#logout").on("click", function(){ 
     logout(loc); 
    }) 

    $(window).unload(function(){ 
     logout(loc); 
    }) 

HTML

<button class="button" name="logout" id="logout">Logout</button>

Edit: Одна вещь, которую я не упомянул, что если я функция анонимной и не пытаются передать местоположение в качестве аргумента, скрипт работает нормально.

+0

** Вы должны связать событие один раз элемент доступен в DOM **, попробуйте обернув его в документ, готовый обработчик или установить его непосредственно перед закрывающим тегом BODY или делегирует событие –

+0

Это уже в функции document.ready –

+1

Является ли этот элемент динамически добавлен в DOM? Есть ли повторяющиеся идентификаторы? –

ответ

0

Глядя на ваш код, вы определили переменную местоположение и попытаться использовать location.replace

function logout(location){ <-- variable location 
    $.post("../php/logout.php", {}, function (response){ 
     if(response.success == "1"){ 
      location.replace(location); <-- trying to use replace on itself 
     } 
    }, "json"); 
} 

переименовать location в другой переменной. Браузер не имеет понятия, вы на самом деле означает window.location.replace()

function logout (redirectLocation) { 
    $.post("../php/logout.php", {}, function(response){ 
     if(response.success == "1"){ 
      window.location.replace(redirectLocation); 
     } 
    }, "json"); 
} 
+0

Это позволит устранить проблемы AJAX и кросс-браузеры, о которых вы упомянули? –

+1

Это не собирается фиксировать состояние гонки разгрузки ... там не так много вы можете сделать. – epascarello

Смежные вопросы