检查用户名JQuery Ajax

时间:2011-08-07 00:20:33

标签: php jquery

我有以下ajax调用

 $.ajax(
            {
                type: "POST",
                url: "Utilities/CheckUsername.php",
                data: "un="+ un,
                success: function(data)
                {
                    if(data!=1)
                    {          
                    $('#mike').html(data);
                     return false; 
                    }                   
                }     
            });

如果使用了用户名,我希望页面保留,否则重定向到for的action属性中的whats。

显然这不起作用。但为什么?我不想使用preventdefault,这样我就可以更好地了解问题和解决方案的位置。

编辑: 服务器代码

<?php
        $seed = 'n48sma94r98';
        $email = $_POST['un'];
        $mysqli = new mysqli('localhost','uml','uml','uml');
        if (!$mysqli) 
        { 
            printf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error()); 
            exit; 
        }
        $query = "Select User_Email as Email  from user2 where User_Email = AES_ENCRYPT('$email','$seed') ";
            $result = $mysqli->query($query);
            if($result->num_rows > 0)
            {    
             echo "1";
            }
            else
            {
            echo "2";
            }

?>

整个表格减去元:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<link rel="stylesheet" type="text/css" href="my.css">
<script type="text/javascript" src="Resources/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">$(document).ready(function(){
 $("#login").submit(function() {
        var un  = $('#username').val();       
            $.ajax(
            {
                type: "POST",
                url: "Utilities/CheckUsername.php",
                data: "un="+ un,
                success: function(data)
                {
                    if(data!=1)
                    {          
                    $('#mike').html(data);
                     return false; 
                    }                   
                }     
            });
             }); 
             }); 
             </script>
</head>
<body>
      <form name="login" id="login" method="post" action="dsds.html">
        UserName<input type="text" name="username" id="username"value="">
        Password<input type="text" name="password" id="password" value="">
        Password Again<input type="text" name="passwordagain" id="passwordagain" value="">
        <input type="hidden" name="NewClass" id="NewClass" value="true">
        <input type="submit" name="submit" id="submit" value="submit">
     </form>
     <span id = "mike"></span>
</body>
</html>

3 个答案:

答案 0 :(得分:2)

一些建议。命名您的变量和方法。什么是“联合国”和“数据”?它们包含什么?

还返回了什么类型的数据?字符串,HTML,XML,JSON?

如果您想重定向,可以使用window.location = 'someURL';

要发送表单,您可以执行以下操作:$('#form-id').submit();

您可以返回更有意义的消息,例如usernameExists,usernameFound或usernameNotExists,usernameNotFound。即使你是唯一一个参与这个项目的人,当你四处寻求帮助时,偷看需要了解你的代码。它应该像句子一样。

答案 1 :(得分:0)

我想你用

if(data!=1)

查看用户名是否被拍摄?

您是否尝试使用某种调试器查看data的值? (甚至是alert())。

正如我假设您在用户名已被占用时,您没有从服务器发送1 ...

答案 2 :(得分:0)

我通常使用OK作为响应指标(或者你称之为)。如果回复(您的data)以OK开头,则为正,否则整个邮件都是错误:

在Javascript中:

success: function(response) {
    if ( 'OK' == response.substr(0, 2) ) {
        // Okay, so show something green or do nothing
        var message = response.substr(2); // Everything after "OK"
    }
    else {
        // Not okay, so show something red or redirect
        var goto = response;
        // The entire response message `response` is the target destination
        // If you don't want PHP to define the redirect location, just hard code it right here
        window.location = goto;
    }
}

在PHP中:

$result = $mysqli->query($query);
$usernameExists = $result->num_rows > 0; // A nice boolean

exit( $usernameExists ? '/error.html' : 'OKThis username is fine' );

<强> PS 即可。 return false函数中的success不执行任何操作。你可以省略它。

修改
不改变PHP:

success: function(response) {
  if ( '1' !== response ) {
    window.location = 'error.html';
  }
}

由于response是一个字符串,我会检查它(而不是数字)。检查相同(===)而不是相等(==)永远不会伤害。