проверка доступности пользователя с помощью jQuery

Я пытаюсь проверить мое имя пользователя, если его можно зарегистрировать или нет с помощью jQuery, скрипт действительно работал без ошибок, но он продолжает говорить " the username in use " даже если в базе данных нет записи имени пользователя.

вот PHP-код для моей функции

 function checkavailabileUserName($UserName) { if(isSet($_POST['userName'])) { $username = $_POST['userName']; $sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName='$username'") or die(mysql_error()); if(mysql_num_rows($sql_check)) { echo '<font color="red">The username <STRONG>'.$username.'</STRONG> is already in use.</font>'; } else { echo 'OK'; } } } 

Я вызываю эту функцию на странице с именем RegisterUserAction.php как это

 checkavailabileUserName($UserName); 

ЗДЕСЬ КОД JAVASCRIPT

 pic1 = new Image(16, 16); pic1.src = "loader.gif"; $(document).ready(function(){ $("#userName").change(function() { var usr = $("#userName").val(); if(usr.length >= 3) { $("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...'); $.ajax({ type: "POST", url: "RegisterUserAction.php", data: "userName="+ usr, success: function(msg){ $("#status").ajaxComplete(function(event, request, settings){ if(msg == 'OK') { $("#userName").removeClass('object_error'); // if necessary $("#userName").addClass("object_ok"); $(this).html('&nbsp;<img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font> '); } else { $("#userName").removeClass('object_ok'); // if necessary $("#userName").addClass("object_error"); $(this).html(msg); } }); } }); } else { $("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>'); $("#userName").removeClass('object_ok'); // if necessary $("#userName").addClass("object_error"); } }); }); 

И НАКОНЕЦ ЗДЕСЬ – HTML-КОД ДЛЯ ПОЛЯ

 <td><label for="userName"></label> <input type="text" name="userName" id="userName" onkeyup="twitter.updateUrl(this.value)" class="inn" /> <div id="status"></div> <script type="text/javascript"> $( function () { twitter.screenNameKeyUp(); $('#user_screen_name').focus(); });</script> 

Где я неправ ?

В вашем коде есть ошибка. Вы используете $ UserName в качестве аргумента для функции checkavailabileUserName, но вы не передаете этот аргумент функции. Это приводит к ошибке, и только вы получили сообщение «Username in Use».

Удалите аргумент $ UserName из функции, и код будет работать отлично.

Может быть, будет хорошо, если вы сможете сделать свой код более чистым и аккуратным и можете использовать jquery ajax call и PHP-код, например:

JQuery Ajax Call

 jQuery(document).ready(function(){ jQuery("#userName").change(function() { jQuery("#status").empty(); var usr = jQuery("#userName").val(); if(usr.length >= 3) { jQuery("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...'); jQuery.ajax({ type: "POST", url: "RegisterUserAction.php" , data: "userName="+ usr, success: function(response){ if(response) { jQuery('#status').html('<img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font>'); return true; } else { jQuery('#status').html('<font color="red">The username <STRONG>'+usr+'</STRONG> is already in use.</font>'); return false; } } }); } else { jQuery("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>'); return false; } }); }); 

PHP-код:

 function checkavailabileUserName($checkavailabileUserName) { if(isset($_POST['userName'])) { $username = $_POST['userName']; $sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName ='$username'") or die(mysql_error()); if(mysql_num_rows($sql_check)>0) { echo false; } else { echo true; } } else { echo false; } } 

Сначала вы должны использовать Firebug для инструментов FF или Chrome / IE в зависимости от вашего браузера (нажмите F12). Посмотрите на консоль и посмотрите, как выглядит сообщение AJAX. Убедитесь, что он правильно размещен и что у вас есть фактическое значение. Обычно я делаю свой jQuery AJAX так:

 $.ajax({ type: "POST", url: "RegisterUserAction.php", data: { userName: usr }, dataType: "json", success: function(data) { if(data.success == 'true'){ //do something } else { //do something } } }); 

Затем на странице PHP я отправляю свой json закодированный обратный вызов так:

 if (mysql_num_rows($sql_check)>0) { //do something $return_arr["success"] = 'true'; } else { //do something $return_arr["success"] = 'false'; } echo json_encode($return_arr); 

Попробуйте изменить свой AJAX, чтобы использовать метод данных и dataType в моем примере и посмотреть, помогает ли это. Взгляните на консоль инструментов Firebug / Dev. Переходит ли значение? Если это так, то может быть что-то не так с PHP-стороной. Дайте мне знать, как это происходит, и если это часть PHP, мы можем заглянуть в нее дальше (хотя сейчас это выглядит хорошо).

Я думаю, что эта строка:

 data: "userName="+ usr, 

в соответствии с спецификацией jQuery данные должны быть переданы в этом формате

 { "userName": usr} 

поэтому, возможно, вы вообще не отправляете никаких данных POST, и вы не входите в

 if(isSet($_POST['userName'])){ 

и сообщение отправлено, если пусто (не «ОК»), поэтому вы получаете ответ "the username in use"