2013-11-20 97 views
0

我正在開發一個網頁,它動態地創建一個帶有各種選擇標籤的表單。 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> 
+1

首先,將'event.preventDefault();'移至事件處理程序的第一行。這可以防止即使發生錯誤時提交表單。接下來,檢查控制檯是否有錯誤(進行更改後) –

+0

您可能會遇到'.serialize'方法返回URL編碼字符串的問題,這意味着該空間將是'%20',依此類推。也許你的php代碼,或者其中的一些,不喜歡這樣。 [參考](http://api.jquery.com/serialize/) – Automatico

+0

@Kevin B:thnx,只是做到了,但沒有改變,沒有在控制檯中的錯誤。控制檯確實發出警告'event.returnValue已被棄用。請改用標準的event.preventDefault()。' – Joppo

回答

1

它工作正常http://jsfiddle.net/a9DN4/

你可能一直在試圖之前掛鉤形式它已經創建,嘗試用

$(document).ready(function() { 
    // Handler for .ready() called. 
}); 

PS來包裝你的代碼,然後移動event.preventDefault();你的函數的1弦,凱文說。

+0

thnx。對不起,我沒有在這個頁面上包含文檔就緒的代碼,但它包含在我的原始代碼中。還補充了凱文B的建議,但沒有效果。 – Joppo

+0

ps:也許是一個很厚的問題:我如何看待你的jsfiddle工作?我開始覺得這個問題與Netbeans調試器有關...(?) – Joppo

+0

@ user2543182它發送隱藏字段的內容,您可以用螢火蟲或Chrome控制檯檢查它:http://i.imgur.com/ LzCZWW2.png。我假設你的php是正確的,所以會有實際的標記。 – mdolbin