2013-04-28 3 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"]); 

Это передается в данных в запросе, поэтому я не знаю, почему он его не распознает. Я действительно не понимаю, в чем проблема с этим, потому что у меня есть еще один аякс в этом скрипте, который очень похож на этот, и он отлично работает ...

Любые мысли ?? Спасибо!

ответ

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

oh .... Я не знал, что о загрузке .... Я действительно не понимаю, как это делается (функция (данные) "работает .... то, что я хочу отобразить, - это сообщение, говорящее имя пользователя принято, но я не знаю, как «подключить» мой php к скрипту, чтобы сделать это ... что внутри функции (данных)? – inBlackAndWhite

+0

@MF - теперь вы знаете, load() - это ярлык для $ .ajax Выполненная функция такая же, как функция успеха в вашем коде, а данные - все, что выводит файл PHP, в вашем случае 'echo 'Username уже существует."; '- это то, что возвращается функции done(). – adeneo

+0

Ооо, так вот как ты возвращаешь материал из php !! Это отлично! Работает как шарм !!! Спасибо! – inBlackAndWhite

Смежные вопросы