2010-11-15 2 views
0

Мне нужно, чтобы файл php обрабатывался, когда пользователь нажимал ссылку/возвращался/выходил из страницы. Его часть процесса сохранения информации пользователя. если я выполняю jquery unload, как я могу запустить php-файл для загрузки и обработки.обрабатывать страницу на UnLoad?

jQuery (window) .bind ("unload", function() { // что я должен добавить? });

+0

Javascript работает в браузере, PHP выполняется на сервере (если вы не работаете node.js или что-то но я не подозреваю в этом случае), поэтому javascript должен будет что-то говорить, подумайте ajax, чтобы что-то вызвать на бэкэнде. – PurplePilot

ответ

1
$(document).ready(function() { 
    $(':input',document.myForm).bind("change", function() { 
     setConfirmUnload(true); 
    }); // Prevent accidental navigation away 
}); 

function setConfirmUnload(on) { 
    // To avoid IE7 and prior jQuery version issues 
    // we are directly using window.onbeforeunload event 
    window.onbeforeunload = (on) ? unloadMessage : null; 
} 

function unloadMessage() { 

    if(Confirm('You have entered new data on this page. If you navigate away from this page without first saving your data, the changes will be lost.')) { 

      $.ajax({ 
       type: "POST", 
       url: "some.php", 
       data: "name=John&location=Boston", 
       success: function(msg){ 
       alert("Data Saved: " + msg); 
       } 
      }); 

    } 

} 

Убедитесь, что у вас есть обновленная версия jQuery. JQuery версии 1.3.2 была ошибка:

Ticket #4418: beforeunload doenst work correctly

Или использовать нативную функцию:

window.onbeforeunload = function() {....} 
1

Вы должны использовать событие beforeunload. Вы можете запустить синхронизированный запрос ajax.

$(window).bind('beforeunload', function() { 
    $.ajax({ 
     url: 'foo', 
     async: false, 
     // ... 
    }); 
}); 

Имейте в виду, что onbeforeunload не поддерживается некоторыми старыми браузерами. Даже если этот метод работает, я не уверен, как долго вы можете (должны?) Блокировать это событие. Было бы очень плохой пользовательский опыт, если бы этот запрос заблокировал несколько секунд.

Хороший компромисс - это, вероятно, рассказать пользователю, что что-то изменило то, что еще не было сохранено. Сделайте это с помощью нескольких булевых проверок и, наконец, верните string value в запросе onbeforeunload. Затем браузер будет изящно спросить пользователя, действительно ли он хочет покинуть ваш сайт, также показывая строку, которую вы предоставили.

+0

, так что я мог бы сделать что-то вроде url: '/files/save.php' .. мне понадобилось бы другое кодирование? – acctman

+0

@acctman: да, но вы должны добавить атрибут 'data' ti actall для передачи некоторой даты вправо. В любом случае, подумав об этом, это, вероятно, не очень хорошо. Я расширил свой ответ более удобным способом, запросив изящно. – jAndy

+0

ОК, я думаю, вы потеряли меня. что самый простой способ для javascript newb, как я сам реализовать. тот, который был бы надежным, мой php-файл готов пойти только для того, чтобы его обрабатывали, просто нужно быстро его вызвать. Благодарю. – acctman

1

Я предполагаю, что синхронный вызов AJAX может работать.

$.ajax({ 
    async: true, 
    url: '/foo/', 
    success: function(data) { 
     // Finished. 
    } 
}); 

Конечно, имейте в виду, что нет никакой гарантии, что это никогда не произойдет. Мое браузером может произойти сбой. Мой компьютер может даже отключиться. И, конечно, я могу отключить JavaScript. Таким образом, вам определенно нужен серверный способ обработки этого, если удобная техника JavaScript на самом деле не работает.