Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax$.POST()查看是否使用用户名?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 使用ajax$.POST()查看是否使用用户名?

Javascript 使用ajax$.POST()查看是否使用用户名?,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是检查返回值是否为1的块: } else if (validateUsername(username.val()) == 1) { errors.html("That username already exists! Please use another.<span id='close'>X</span>"); errors.fadeIn("slow");

这是检查返回值是否为1的块:

                } else if (validateUsername(username.val()) == 1) {
                    errors.html("That username already exists! Please use another.<span id='close'>X</span>");
                    errors.fadeIn("slow");  
                    username.css("border", "solid 2px red");                    
                }
这将向ajax发送一个请求,并用响应填充var数据

if (isset($_POST['validateUsername']))
{
    echo 1;
}
这是将发送响应的ajax,现在基本上是int 1,用于检查

但是,我总是没有定义。 我的意思是,fireBug确实说“request=1”,但看起来if语句不起作用

如果我只返回1;在没有ajax的情况下手动操作,它可以正常工作


为什么要这样做?

Ajax函数是异步的
validateUsername()
在ajax调用完成之前返回(没有返回值,这就是为什么您会看到未定义)


处理此问题最优雅的方法可能是重构到
return$.ajax…
,并处理返回的对象。

ajax是异步的,因此当您在此处返回数据时:

function validateUsername(username) {
    $.post("js/ajax/ajax.php", { validateUsername : username }, function(data) {
        return data;
    });
}
试着在这里找到它:

validateUsername(username.val()) == 1
它将不起作用,因为ajax调用尚未完成(并且返回仅从内部函数返回)。
相反,你应该:

function validateUsername(username) {
    return $.post("js/ajax/ajax.php", { validateUsername : username });
} 

validateUsername(username.val()).done(function(data) {
    if ($.trim(data) === 1) {
        errors.html("That username already exists! Please use another.<span id='close'>X</span>");
        errors.fadeIn("slow");  
        username.css("border", "solid 2px red");       
    }
});
函数validateUsername(用户名){
返回$.post(“js/ajax/ajax.php”,{validateUsername:username});
} 
validateUsername(username.val()).done(函数(数据){
如果($.trim(数据)==1){
errors.html(“该用户名已存在!请使用另一个.X”);
错误。fadeIn(“慢”);
css(“边框”,“实心2px红色”);
}
});
AJAX代表异步的JavaScript和XML。忽略XML部分,但异步是让您感到头疼的地方


任何依赖于ajax调用结果的内容都必须在成功处理程序中,由成功处理程序调用,或者定义为仅在成功处理程序之后运行。

欢迎来到奇妙的异步世界!你不能那样做。我还以为我知道这一切呢@JunatanmDegraded-刚刚添加了一个?因此,如果我基本上是正确的,那么。完成将等待从validateUsername()获得响应,如果是。。data=ajax发送的结果?@junatanmdasted-是,从validate函数返回延迟值,done()等待ajax调用完成,然后您可以比较这些值。越早越好,就没有可比较的值了@朱纳坦说得很清楚,“完成”的真正含义是“成功”。因此,
done
回调只有在请求成功的情况下才会运行……您也可以使用
.fail(函数…)
来捕获请求错误。@Ian-^^^^^好的一点,它与名称
done()
有点混淆,旧的
success
是一个更具描述性的名称,但
总是()
失败()
都是好名字。
function validateUsername(username) {
    return $.post("js/ajax/ajax.php", { validateUsername : username });
} 

validateUsername(username.val()).done(function(data) {
    if ($.trim(data) === 1) {
        errors.html("That username already exists! Please use another.<span id='close'>X</span>");
        errors.fadeIn("slow");  
        username.css("border", "solid 2px red");       
    }
});