我正在開發一個網頁,它動態地創建一個帶有各種選擇標籤的表單。 Unfortenatley jquery提交函數將不正確的信息傳遞給必須處理這些信息的php文件(form_submit.php); (netbeans 7.4)調試器總是在php文件中的$ _POST中顯示默認(未選定)值,而不是所選值。更奇怪的部分:當我複製(在下面的代碼中)的控制檯輸出與序列化的formdata直接到下面的ajaxcode(見代碼),php調試器顯示$ _POST陣列內正確的選定值..(?)jquery提交功能不起作用
由此產生的形式是相當可觀的。我能想到的唯一理論原因是因此執行'var dataAjax = $(this).serialize();'需要時間和下面的Ajax調用啓動時沒有完成......(??)
代碼:
$("#myForm").submit(function(event){
event.preventDefault();
var dataAjax = $(this).serialize(); //does not work, but when copying the string from the console in line below it does work.
console.log('SUBMITTED FORM: '+ dataAjax );
//next line is only used as a test
//var dataAjax = 'agreementapproval0=SolarX_10&selected_emeterproductid0=SolarX_10_1_1&selected_eproductid0=SolarX_10_2_4&selected_emeterproductid1=NOSELECTION&selected_emeterproductid2=NOSELECTION&selected_eproductid1=NOSELECTION&selected_eproductid2=NOSELECTION&form_token=30688e467ee88167805ad0f330809d74';
$.ajax({
type: "POST",
url: "form_submit.php",
data: dataAjax,
dataType: "json",
async: true,
success: function(msg){
if(msg.statusgeneral == 'success'){
}
else
{
}//else
}, //succes: function
error: function(){
$("#errorbox").html("There was an error submitting the form. Please try again.");
}
});//.ajax
//make sure the form doesn't post
//return false; //depreciated
//} //if(form.valid()
});//$("#myForm").submit()
<form id="myForm" name="myForm" action="" method="post">
<div id="wrapper"></div> <!--anchor point for adding set of product form fields -->
<input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
<input type="submit" name="submitForm" value="Confirm">
</form>
首先,將'event.preventDefault();'移至事件處理程序的第一行。這可以防止即使發生錯誤時提交表單。接下來,檢查控制檯是否有錯誤(進行更改後) –
您可能會遇到'.serialize'方法返回URL編碼字符串的問題,這意味着該空間將是'%20',依此類推。也許你的php代碼,或者其中的一些,不喜歡這樣。 [參考](http://api.jquery.com/serialize/) – Automatico
@Kevin B:thnx,只是做到了,但沒有改變,沒有在控制檯中的錯誤。控制檯確實發出警告'event.returnValue已被棄用。請改用標準的event.preventDefault()。' – Joppo