我正在尝试发出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 :(得分: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_*
函数已被弃用且不安全。