Использование Ajax в onbeforeunload для автоматического сохранения данных поля - PullRequest
1 голос
/ 04 января 2012

Я пытаюсь использовать AJAX в функции window.onbeforeunload для автоматического сохранения текстового поля на странице моего сайта (кнопка сохранения отсутствует, все это делается в фоновом режиме).Функция сохранения написана на PHP.Я начал с того, что попробовал следующее:

window.onbeforeunload = function(e){
  var noteelement = document.getElementById( 'note' );
  var mynote = noteelement.value;

  $.post('save_my_note.php', { thenote: mynote }, function(data){});
  };

При исследовании я понял, что из-за асинхронного характера вызова ajax код php не вызывается, потому что окно закрывается до того, как функция отключается.с сервера.

Конечно, как уже говорили другие, если я добавлю возвращаемое значение в функцию onbeforeunload, чтобы вызвать всплывающее диалоговое окно (это будет окно «Вы уверены, что хотите покинуть»)?), он работает, так как вызов .post имеет время для запуска, пока диалоговое окно ожидает ответа:

  $.post('save_my_note.php', { thenote: mynote }, function(data){});
  return mynote;
  };

Было сказано, что я должен изменить этот пост-вызов на асинхронный AJAX, такчто функция ожидает завершения функции, но не очень разбирается в синтаксисе, я не совсем уверен в синтаксисе, который мне нужен.Вместо функции post я попробовал следующее:

        $.ajax({
            url: "save_my_note.php",
            data: "{thenote: mynote}",
            async: false                 
        });

Однако, похоже, это тоже не работает.

У кого-нибудь есть простой пример кода для реализации автосохранения синхронно с помощью функции onbeforeunload (или onunload ??)?Я не специалист по javascript или jquery, и примеры, которые я нашел в Интернете, сбивают с толку.

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Ваш последний пример должен работать, вам нужно изменить asynch: false на async: false (лишние h должны быть удалены) согласно документации jQuery

0 голосов
/ 04 января 2012

Может быть, вы могли бы заставить паузу тайм-аута - не знаю, если это действительно сработает, просто предположение:

var bSaved = false;
window.onbeforeunload = function(e){
  bSaved = false;
  var noteelement = document.getElementById( 'note' );
  var mynote = noteelement.value;

  $.post('save_my_note.php', { thenote: mynote }, function(data){ bSaved = true; });

  window.setTimeout('bSaved = true',2000);

  while (!bSaved) {}

  };
...