2011-12-11 103 views
0

我試着去提交表單使用Ajax是我的簡化代碼 我的指數:問題與形式和Ajax

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script type="text/javascript" src="jquery-1.7.1.min.js"></script> 
     <script> 
      $(document).ready(function(){ 
       $("#addemail").click(function(){ 
        var email=$("#email").val(); 
        $.ajax({ 
         type: "POST", 
         url: "addemail.php", 
         data: "email="+email, 
         success: console.log("success!"), 
         error: console.log("error!") 
        });   
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <div id="wrapper"> 
     <h2>Email:</h2> 
      <form action="" method="post"> 
       <table> 
        <tr> 
         <td><label>Années:</label></td> 
         <td><input type="text" id="email" name="email" /></td> 
         <td><input type="submit" id="addemail" value="Ajouter" /></td> 
        </tr> 
       </table>     
      </form> 
     </div> 
    </body> 
</html> 

,在這裏我的PHP文件

<?php 
    $connection = mysql_connect('localhost', 'XXX', 'XXX'); 
    $db= mysql_select_db('mydb', $connection); 
    $email= $_POST["email"]; 
    $query = 'INSERT INTO users(email) VALUES ("'.mysql_real_escape_string($email).'")'; 
    mysql_query($query); 

?> 

我的問題是,它不工作。 ..但是如果我在ajax之後放置了一個斷點,它會在db中編寫好電子郵件,然後我將兩個控制檯日誌(成功!和錯誤!)... 另外,如果我添加action =「addemail。 PHP「的形式,它不會執行Ajax和去PHP頁面(這是空白ofc但是寫在db ...)

有人幫我嗎?

+0

歡迎堆棧溢出!您在查詢中沒有執行任何錯誤檢查。在* mysql_query()'調用之後,你需要*來做到這一點。否則,如果查詢失敗,腳本將中斷。如何做到這一點在[mysql_query()'](http://php.net/mysql_query)手冊或本[參考問題。](http://stackoverflow.com/questions/6198104/reference什麼是一個完美的代碼示例使用mysql的擴展) –

回答

3

這是錯誤的:

success: console.log("success!"), 

這樣一來,您正在執行的日誌呼叫馬上,並指派其結果success

你需要的是創建將得到執行兩個匿名函數時,事件發生了:

success: function() { console.log("success!"); }, 
error: function() { console.log("error!"); }, 
+1

啊,打我回答。 – mc10

0

$.ajax({})你需要把

return false; 

否則,即使AJAX是成功的,它會繼續執行,去到PHP頁面。

+0

我很確定jQuery負責處理事件處理程序。 – mc10

+0

沒有。如果你不添加返回false,它將無法正常工作。我前幾天遇到了同樣的問題。 – john

+0

至少,這從來都不是我的問題。 – mc10

1

成功和錯誤需要被包裝成函數:

success: function (data, textStatus, jqXHR) { console.log("success!") }, 
error: function (jqXHR, textStatus, errorThrown) { console.log("error!") } 
+0

Thanx !!!那是問題!但不能我只寫:成功:函數(){console.log(「成功!」)},? – blop

+1

@blop是的。但是,通常情況下,您可能需要訪問數據(以獲得成功)或拋出的錯誤(對於錯誤),所以如果需要它們,則我將參數留下。 – mc10