автоматическое сохранение данных формы с помощью jquery и php

Я вполне согласен с PHP, но полный noob с jQuery и застрял в автосохранении данных формы.

Функция autosave dummy.php каждые 30 секунд в dummy.php . Я отправляю сериализованные данные формы для обработки (-> database) в savetest.php .

В этот момент я застрял в этом вопросе:

Как мне заставить savetest.php «слушать» входящие данные и реагировать на них?

В этот момент я получаю предупреждение «О нет!» (= без успеха) каждые 30 секунд.

Вот мой сокращенный пример кода:

dummy.php , snippet 1 (HTML и PHP):

 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="../../_include/jquery-1.9.1.min.js"></script> </head> <body> <h1>My Form</h1> <form name="form1" id="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <input type="radio" name="item_2_1" id="c_2_1_0" value="0" /> <input type="radio" name="item_2_1" id="c_2_1_1" value="1" /> <input type="radio" name="item_2_1" id="c_2_1_2" value="2" /> <input type="radio" name="item_2_1" id="c_2_1_3" value="3" /> <input type="checkbox" name="item_3_1[]" id="c_3_1_0" value="yes" /> <input type="checkbox" name="item_3_1[]" id="c_3_1_1" value="no" /> <input type="text" name="item_4_1" id="c_4_1_0" /> </form> 

dummy.php , snippet 2 (jQuery):

 <script type="text/javascript"> function autosave() { jQuery('form').each(function() { jQuery.ajax({ url: 'savetest.php', data: { 'autosave' : true, 'formData' : jQuery(this).serialize()}, type: 'POST', success: function(data){ if(data && data == 'success') { alert("OK!"); }else{ alert("Oh no!"); } }// end successful POST function }); // end jQuery ajax call }); // end setting up the autosave on every form on the page }// end function autosave() jQuery(function($) { setInterval(autosave, 30 * 1000); }); </script> 

и это savetest.php :

 if (isset($_POST)) { var_dump($_POST); exit(); } else { echo 'Hi, no $_POST.'; } 

к сожалению, все еще безуспешное предупреждение … и savetest.php dumping array(0){} 🙁

 if(isset($_POST)): //processing to save autosave else: //the rest of your form code and jQuery stuff endif; 

Это проверит, будут ли данные отправляться, //rest of your data должна представлять весь другой код, сгенерированный страницей, которая не выполняет никакой обработки.

Кроме того, могу ли я предложить очистить этот атрибут данных?

 data: { 'navigation': 'save', 'autosave' : true, 'formData' : jQuery(this).serialize() } 

Затем на стороне сервера вы можете получить к нему доступ как обычный, $_POST['navigation'] и $_POST['formData'] содержит массив комбинаций name=value .

Кроме того, ваша функция должна быть в пределах $(document).ready , или, как $(document).ready ниже:

 jQuery(function($){ //the rest of your code }); 

jQuery(function($) будет работать как $(document).ready и будет псевдоним символа $ как jQuery находясь внутри этой функции.

Это должно охватывать все базы.