2013-08-19 27 views
3

我對PHP很滿意,但與jQuery總noob,並卡住了自動保存表單數據。自動保存表單數據與jQuery和PHP

autosave函數在dummy.php中每30秒調用一次。我將用於處理( - >數據庫)的序列化表單數據發送到savetest.php

在這一刻,我堅持這樣的疑問:

我怎麼savetest.php爲「聽」到輸入數據和反應?

此時,我得到警報'哦,不! (=沒有成功)每30秒。

這是我的縮短示例代碼:

dummy.php,片段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,片段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> 

和t他是savetest.php

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

遺憾的是,仍然不成功的警報......和savetest.php傾銷array(0){} :-(

+0

如果您使用的是AJAX,您確實應該調用與調用頁面不同的單獨後端腳本。 –

+0

爲什麼數據=='成功'?數據是服務器響應,在這種情況下var_dump不是字符串'success'。 – xmarston

+0

@xmarston ok,我可以在'var_dump'()之後回顯'success'嗎? – michi

回答

2
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,或類似如下:

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

jQuery(function($)將運行$(document).ready並將別名$符號爲jQuery,而函數內。

這應該涵蓋所有基地。

+0

謝謝你的所有建議。看到我的編輯 - >不幸的是,我還是得到了'哦,不'的警報......任何想法爲什麼? – michi

+0

@michi是否對'data'參數進行了調整?它看起來仍然是一樣的,你也可以暫時使用'if(isset($ _ POST))',然後把它轉儲回來,就像這樣 - >'echo'

', print_r($_POST, TRUE),'
';' – Ohgodwhy

+0

@michi Keep我更新了,這樣我就可以確定你已經解決了這個問題。 – Ohgodwhy