2013-04-28 47 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