2012-06-25 25 views
0

我有一個形式,將一些數據發送到PHP文件,然後返回一些結果爲例:加入拖事件

<form action"<?php $_SERVER['PHP_SELF']?>" method="post" id="data"> 
    <input type"text" name="first_name"/> 
    <input type="text" name="last_name"/> 
</form> 

然後在JavaScript我想趕上clcik事件提交表單爲例:

$("#data").submit(function(){ 
some code ..... 
}); 

這將阻止提交輸入形式到PHP文件的默認操作,問題是我可以發送一個形式的PHP文件的數據和同一時間捕獲事件爲相同的形式?

注意從PHP文件返回的數據會被另一個PHP需要 功能

+0

您需要使用[AJAX](http://api.jquery.com/jQuery.ajax/)將數據發送到處理返回的數據爲JSON PHP。 –

+0

如果您的'返回數據'是另一個'php函數'需要的,爲什麼不在第一個地方調用這個php函數,然後將數據作爲ajax返回,並且如果第二個php函數返回'final output' ,作爲ajax響應。 –

+0

@Joy,如果我想通過jquery顯示結果,我可以通過jQuery中的回調函數捕獲返回的數據並顯示結果,但我想通過php在同一頁面顯示結果,我認爲這會更好性能和速度更快,對嗎? –

回答

3

爲了防止形式的默認行爲提交(這是重新加載頁面),你需要使用event.preventDefault()像這

$("#data").submit(function(event){ 
    event.preventDefault(); 
    //some code ..... 
}); 

而且表單數據上傳到php無需刷新頁面,你需要使用任何Ø F中的jQuery的可用ajax方法,比如.post()(將發送使用HTTP POST方法形式值),如

$("#data").submit(function(event){ 
    event.preventDefault();// prevent page reload 
    // Now post the form using Ajax 
    // $(this).serialize() will return an array of all form fields as 
    //             name value pair 
    $.post('some_script.php',$(this).serialize(),function(data){ 
     // Just to check if everything is working well 
     console.log('Form Submitted Successfully.'); 
     // do whatever you want with the data 
    }); 
}); 

如果你的PHP腳本返回json格式的數據,你可以使用PHP設置content-Type頁眉或強迫jQuery來通過在第四個參數指定dataTypeJSON

$.post('some_script.php',$(this).serialize(),function(data){ 
     // Just to check if everything is working well 
     console.log('Form Submitted Successfully.'); 
     // do whatever you want with the data 
    },'json'); 
+0

萬一不需要處理從php文件返回的數據,並通過JavaScript處理數據,這將是正確的解決方案,在我的情況下,我需要檢查和處理返回的數據再次由PHP! –

+0

@moata_u,我剛剛添加了'console.log'作爲簡單的例子,你可以用成功回調中的返回數據做任何事。 –

+0

好的,你的意思是我可以通過使用$ .post(url,data,callback)再次將返回的數據傳遞給一個php文件,在第一篇文章成功後! –

0
$("#data").submit(function(e){ 
e.preventDefault(); 
$.post("<?php echo $_SERVER['PHP_SELF'] ?>",$(this).serialize(),function(r){ //Do Some Action }); 
}); 
+2

忘記'e.preventDefault()' –

+2

他們也可能希望使用'$(this).serialize()'從表單獲取所有輸入,而不是單獨列出它們。 –

+0

好的檢查我的編輯 –