为什么我的ajax jquery不检查用户名?

时间:2014-01-22 06:21:35

标签: javascript jquery ajax

这是我的j查询代码:控制台显示“更改”,如果操作通过j查询,我会添加该更改。我还通过手动传递参数来运行valdiateUname.php,它返回正确的结果但我的j查询不检查用户名。问题是什么?任何人都可以帮助我吗?

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
    jQuery(function ($) {
        uname.change(function(){ 
            console.log('change');
            $.ajax({
                type: "POST", 
                data:{                  // data that will be sent
                    uname: uname.val() 
                },
                url:"validateUname.php",   
                //dataType:"text",        // what type of data we'll get back
                beforeSend: function(){
                    if(!$ ('span.unameCheck').html()){
                            $(this).after(' <span class="unameCheck" style="color:blue;"><b>Checking for the availability of username.....</span>');
                      } 
                    },  
                success:function(data){
                    if(data != 0 ) {
                        if(!$ ('span.unameError2').html()){
                            $(this).after(' <span class="unameError2" style="color:red;"><b>Username already exist.</span>');
                        }
                        return false;
                        //valid = true;
                    }
                    else {
                        $(this).toggleClass('unameError2', false);
                        $('span.unameError2').fadeOut().remove();
                        return true;
                    }
                }

            });
        });
      });
</script>

这是我的validateUname.php代码:

<?php 
require_once("config.php");
$username= isset($_POST["uname"]) ? $_POST["uname"] : $_GET["uname"];
$sql= "SELECT temp_user_login  FROM temp_user_register WHERE temp_user_login = '$username' ";
echo $sql;
    $result = mysql_query($sql); 
        echo $result;
        $msg = mysql_num_rows($result);
        echo $msg;
?>

3 个答案:

答案 0 :(得分:2)

if(!$ ('span.unameError2').html())永远不会触发,因为它不会返回false,它会返回''并且您的条件语句不会检查它。

证明在jsFiddle

答案 1 :(得分:1)

使用前检查unamedeclared

如果$(this)代表uname,请将$(this)替换为uname

echo只应once PHP,否则jquery function将永远只会转到if部分,

$result = mysql_query($sql); 
$msg=0;
if($result){
   $msg = mysql_num_rows($result);
}
echo $msg;

如果您不确定requestPOST还是GET,请使用$_REQUEST代替$_POST$_GET

$username = isset($_REQUEST["uname"]) ? $_REQUEST["uname"] : '';

同样使用mysqli代替mysql,因为deprecated

答案 2 :(得分:0)

所以这对我有用。我写的是这可能会帮助一个有同样问题的人。已经有太多正确的答案,但有时我们需要知道我们不应该做什么。

uname.blur(function(){ 
        $.ajax({
            type: "POST", 
            data:{                  // data that will be sent
                uname: uname.val() 
            },
            url:"validateUname.php",   
            beforeSend: function(){
                 $ ('span.unameError2').css("color","blue").html(" Checking for username availability....");
                   $ ('span.unameError2').fadeIn('fast'); 
                },  
            success:function(data){
                if(data != 0 ) {
                   $ ('span.unameError2').css("color","red").html("Username already exist.");
                   $ ('span.unameError2').fadeIn('fast');

                }
                else {
                   $ ('span.unameError2').css("color","blue").html("Username available");
                   $ ('span.unameError2').fadeOut(3000);
                }
            }

        });
    });