繁体   English   中英

jQuery Ajax脚本不起作用

[英]Jquery Ajax Script Not Working

我的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错误”。 我还检查了篡改数据,是否正在发出ajax请求。

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

更新..

成功称为ajax调用成功。 因此,那里不需要调用ajaxComplete ..(如果您认为有问题)。

成功如果请求成功,将调用的函数。 该函数传递了三个参数:服务器返回的数据,根据dataType参数设置格式; 描述状态的字符串; 和jqXHR对象(在jQuery 1.4.x中为XMLHttpRequest)。 从jQuery 1.5开始,成功设置可以接受一系列函数。 每个函数将依次调用。 这是一个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()
{

仅当您在输入字段之外的某处单击时,才会触发input text上的change() 。//尝试一次。

您需要的是keyup()

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

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

要感谢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);
        }

    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM