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,看起来很像那个,它工作得很好......

有什么想法吗??谢谢!

4

1 回答 1

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_*功能已弃用且不安全。

于 2013-04-28T18:48:11.830 回答