0

我对 ajax/php 脚本有疑问。

它用于检查用户注册的用户名可用性。

javascript

$(document).ready(function()
{
    $("#username").change(function()
    {
        var usr = $("#username").val();
        if(usr.length >= 4)
        {
            $("#status").html('<img src="./style/images/loading.gif">&nbsp;Checking availability...');

            $.ajax(
            {
                type: "POST",
                url: "./ps/ajax_validation.php",
                data: "username="+ usr,
                success: function(msg)
                {
                    $("#status").ajaxComplete(function(event, request, settings)
                    {
                        if(msg == 'OK')
                        {
                            $(this).html('&nbsp;<img src="./style/images/tick.gif" align="absmiddle">');
                        }
                        else
                        {
                            $(this).html(msg);
                        }
                    });
                }
            }); 

        }
        else
        {
            $("#status").html('<font color="red">The username should have at least <strong>4</strong> characters.</font>');
        }
    });
});

html

...
<input class="login_reg_field" id="username" name="username" type="text" value="<?php echo @$d['username']?>" />
<div id="status"></div>
...

ajax_validation.php

<?php
include("../core/config.php");
if(isset($_POST['username'])){
    $username = $_POST['username'];
    $test = $user->checkUsernameAvaible($username); //Return True if Username IS Avaible
    if(!$test){
        echo '<font color="red">The nickname <STRONG>'.$username.'</STRONG> is already in use.</font>';
    }else{
        echo "OK";
    }
}
?>

php 脚本正在运行,我使用 $_GET 变量手动尝试了它。

在表单上尝试时,它保持不变,Checking avaibility...并且 Firefox 控制台上没有 Javascript 错误。我还检查了 Tamper Data,它正在发出 ajax 请求,而且确实如此。

问题似乎存在,$("#status").ajaxComplete(function(event, request, settings){因为我在此行之后尝试了警报,但没有弹出警报。

4

2 回答 2

0

更新..

ajax 调用成功时调用success。所以没有必要在那里调用ajaxComplete ..(如果你认为有问题)..

成功 请求成功时调用的函数。该函数获得三个参数: 从服务器返回的数据,根据 dataType 参数格式化;描述状态的字符串;和 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。从 jQuery 1.5 开始,success 设置可以接受一个函数数组。每个函数都会被依次调用。这是一个 Ajax 事件。

你可以检查响应数据并做你的事情..

 success: function(msg){
           if(msg == 'OK')
           {
              $(this).html('&nbsp;<img src="./style/images/tick.gif" align="absmiddle">');
           }
           else
           {
              $(this).html(msg);
           }

         }

我认为问题就在这里

$("#username").change(function()
{

change()仅当您单击input text输入字段外的某个位置时才会触发。//尝试一次。

你需要的是keyup()

$("#username").keyup(function()
{
于 2013-01-29T09:01:11.030 回答
0

好的回答我自己的问题,我已经解决了。

要感谢itachi让我知道使用.done而不是success:

问题就在那里。

这是脚本的修改和工作部分:

    var req = $.ajax(
    {
        type: "POST",
        url: "./ps/ajax_validation.php",
        data: "username="+ usr,
    }).done(function(msg)
    {
        if(msg == 'OK')
        {
            $("#status").html('&nbsp;<img src="./style/images/tick.gif" align="absmiddle">');
        }
            else
        {
            $("#status").html(msg);
        }

    });
于 2013-01-29T09:40:06.590 回答