2013-04-28 118 views
0

我試圖做一個Ajax請求檢查用戶名的數據庫已經存在,但我發現它從一個奇怪的行爲。這裏是我的腳本:

$("#username").blur(function() 
    { 
     $.ajax({ 
      type: "POST", 
      url: "check_username.php", 
      data: 
      { 
       username: $("#username").val() 
      }, 
      success: function() 
      { 
       $("#username_taken").load("check_username.php").show(); 
      }, 
     }); 
     return false; 
    }); 

和我的PHP:

<?php 

    if (($connection = mysql_connect("database", "user", "pass")) === false) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    if ((mysql_select_db("database", $connection)) === false) 
    { 
     die ("Could not select database : " . mysql_error()); 
    } 

    if ($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
     $username = mysql_real_escape_string($_POST["username"]); 
     $check = mysql_query("SELECT username FROM users WHERE username = '$username'"); 
     $check_num_rows = mysql_num_rows($check); 
     if ($check_num_rows == 1) 
     { 
      echo "Username already exists."; 
      return false; 
     } 
    } 
?> 

當我看到網絡選項卡上,我看到正在發送兩個請求,一個GET和POST,使用相同的信息,我不明白爲什麼。而我的代碼不會在所有的工作時,我有

if ($_SERVER["REQUEST_METHOD"] == "POST")

但如果我嘗試

if ($_SERVER["REQUEST_METHOD"] == "GET")

它的作品,我有一個錯誤:

Notice: Undefined index: username in check_username.php on line 20

Line 20: $username = mysql_real_escape_string($_POST["username"]); 

正在傳遞請求中的數據,所以我不知道它爲什麼不識別它。我真的不明白這個的問題,因爲我已經在腳本,看起來很像是彼此Ajax和它的作品完美...

有什麼想法? 謝謝!

回答

0

load()是一個快捷方式:

$.ajax({ 
    type: 'GET', 
    ....etc 
}); 

那麼,你是首先發送POST請求,並在POST請求的成功處理您所使用load(),至極做同樣的事情,但有GET請求,所以你兩次調用同一個PHP文件,這就是爲什麼你看到一個POST和一個GET請求。

下面是你應該做的:

$("#username").on('blur', function() { 
    $.ajax({ 
     type: "POST", 
     url : "check_username.php", 
     data: { username: this.value } 
    }).done(function(data) { 
      $("#username_taken").html(data).show(); 
    }); 
}); 

而且你應該考慮使用PDO,作爲老mysql_*功能已被取消,並不安全。

+0

哦....我不知道有關負載....我真的不明白怎麼「完成(功能(數據)」的工作....我想顯示爲一條消息說名取,但我不知道怎麼我的PHP「連接」到腳本來做到這一點......裏面有什麼功能(數據) – inBlackAndWhite 2013-04-28 19:00:23

+0

@MF - ?現在你知道,負載()是$就一個快捷方式!該做的功能是一樣的在你的代碼的成功的功能,並且數據的任何PHP文件的輸出,你的情況'回聲「用戶名已存在。」;'就是返回到完成()函數 – adeneo 2013-04-28 19:09:52

+0

哦,這就是你從php獲取東西的方式!!這是完美的!作品像一個魅力!!!謝謝! – inBlackAndWhite 2013-04-28 19:14:05