Я вполне согласен с 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
находясь внутри этой функции.
Это должно охватывать все базы.