jquery用ajax做值重复验证的时候,第一次调用变量是空 第二次调用才是想要的值

$(function(){$("#txtloginname").blur(function(){varsloginName="";varloginname=$(this)... $(function(){
$("#txtloginname").blur(function(){
var sloginName ="";
var loginname = $(this).val();
if(loginname == ""){
sloginName = "用户名不能为空";
}else {
$.post("validate!loginname?dt="+new Date().getTime(),{"loginname":loginname},
function(data){
if(data.lOK){
sloginName = "用户名可以使用";
flagl = true;
}else {
sloginName = "用户名已存在";
flagl = false;
}
},"json");
}
alert(sloginName);//必须加这个 否则就显示上次的值
$("#loginNameInfo").html("");
$("#loginNameInfo").html(sloginName);
});
});
展开
 我来答
tz6060996
2012-04-23 · TA获得超过2283个赞
知道大有可为答主
回答量:1171
采纳率:100%
帮助的人:1623万
展开全部
$("#loginNameInfo").html(sloginName);
这句应该写在回调函数里,
}else {
$("#loginNameInfo").html("");//异步操作前清空信息内容
$.post("validate!loginname?dt="+new Date().getTime(),{"loginname":loginname},
function(data){
if(data.lOK){
sloginName = "用户名可以使用";
flagl = true;
}else {
sloginName = "用户名已存在";
flagl = false;
}
$("#loginNameInfo").html(sloginName);//回调函数最后加入信息内容
},"json");
}
追问
问题是解决了 但是我想请问一下 为什么我的那个方法 要第二次输出sloginName  才能显示呢 如果能回答这个我加分
追答
要说清楚这个问题得先了解$.post,$.post是异步向服务器端发送请求,也就是说他只负责向服务器端发送一个请求,不需要等服务器的回应,就再继续做下面的事,像你这么写法$("#loginNameInfo").html(sloginName);还没有等到服务器回应就先执行了。当服务器处理完成数据后,自动调用客户端的function(data){....}执行相应的操作(所以这块内容叫回调函数)。因此,这里有一个先后的问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式