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;
}
很急啊,麻烦大家了 展开
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;
}
很急啊,麻烦大家了 展开
2个回答
展开全部
ajax是异步访问,你可以理解为多线程,相当于开了两个页面一起访问。
jquery异步访问
$.post(url,function(data){...});
这个函数相当于新开了一个页面,页面地址为url
当页面访问成功(服务器响应)以后执行函数function(data){...}(类似timeout)
js并不能开启线程,但是js可以通过延时操作来模拟多线程的操作
其实并不是实际意义上的多线程,$.post也只能发送http协议请求
你不需要知道原理,会用就可以了,实质上是延时访问另一个页面(不能是跨域页面)
jquery异步访问
$.post(url,function(data){...});
这个函数相当于新开了一个页面,页面地址为url
当页面访问成功(服务器响应)以后执行函数function(data){...}(类似timeout)
js并不能开启线程,但是js可以通过延时操作来模拟多线程的操作
其实并不是实际意义上的多线程,$.post也只能发送http协议请求
你不需要知道原理,会用就可以了,实质上是延时访问另一个页面(不能是跨域页面)
展开全部
js是没有多线程的。
js中的异步请求是通过回调来实现的。
即是说。真正发送请求的并不是js。
而是浏览器的内部方法。
js只是注册了一个请求对象,以及回调函数。
具体什么时候执行回调,是浏览器决定的。
js中的异步请求是通过回调来实现的。
即是说。真正发送请求的并不是js。
而是浏览器的内部方法。
js只是注册了一个请求对象,以及回调函数。
具体什么时候执行回调,是浏览器决定的。
更多追问追答
追问
可是我的代码如下
(function checkState(){
if(returnState == "0"){
check = true;
}else{
setTimeout(function(){checkState();},500);
}
})();
不是在等待ajax的回调函数完成吗?
为什么执行到这个代码段的时候,好像变成了多线程呢?
追答
这不是多线程。checkState只不过是轮询state的状态是不是0,如果不是,就隔一段时间重新查看。这哪是多线程呢?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询