js jquery 不是单线程的吗?$.post的回调函数怎么就不是先执行再执行后面的代码呢?

//验证用户名functioncheckUserName(obj){//只有正确才返回truevarcheck=false;if($(obj).val()==""||$(... //验证用户名
function checkUserName(obj){ //只有正确才返回true
var check = false;
if($(obj).val() == "" || $(obj).val() == null){
$(obj).next().css("color","red");
$(obj).next().text("不可以为空!");
}else {
var url ="bCheckUNameUser?user.userName=" + $(obj).val();
url = encodeURI(url);
var returnState = null;
$.post(url,function(data){
returnState = data;
if(data == "0"){
$(obj).next().css("color","green");
$(obj).next().text("正确!");
}else if(data == "1"){
$(obj).next().css("color","red");
$(obj).next().text("用户名已存在");
}else {
$(obj).next().css("color","red");
$(obj).next().text("后台异常");

}
});
(function checkState(){
if(returnState == "0"){
check = true;
}else{
setTimeout(function(){checkState();},500);
}
})();
}
return check;
}
很急啊,麻烦大家了
展开
 我来答
szcjkjk009
2012-11-28 · 超过24用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:34.4万
展开全部
ajax是异步访问,你可以理解为多线程,相当于开了两个页面一起访问。
jquery异步访问
$.post(url,function(data){...});

这个函数相当于新开了一个页面,页面地址为url
当页面访问成功(服务器响应)以后执行函数function(data){...}(类似timeout)
js并不能开启线程,但是js可以通过延时操作来模拟多线程的操作
其实并不是实际意义上的多线程,$.post也只能发送http协议请求

你不需要知道原理,会用就可以了,实质上是延时访问另一个页面(不能是跨域页面)
cainiaokan
2012-11-26 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:609万
展开全部
js是没有多线程的。
js中的异步请求是通过回调来实现的。
即是说。真正发送请求的并不是js。
而是浏览器的内部方法。
js只是注册了一个请求对象,以及回调函数。
具体什么时候执行回调,是浏览器决定的。
更多追问追答
追问
可是我的代码如下
(function checkState(){
if(returnState == "0"){
check = true;
}else{
setTimeout(function(){checkState();},500);
}
})();
不是在等待ajax的回调函数完成吗?
为什么执行到这个代码段的时候,好像变成了多线程呢?
追答
这不是多线程。checkState只不过是轮询state的状态是不是0,如果不是,就隔一段时间重新查看。这哪是多线程呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式