<script type="text/javascript">
$(document).ready(function(){
/*这里是一些执行的过程,无错*/
});
function checkInput(obj){
var regx = /^[a-zA-Z]+$/;
if(!regx.test(obj.sendtos.value)){
//如果不匹配则返回false
return false;
}else{
//如果匹配则执行下面ajax
$.ajax({
url: url,
type: 'GET',
data:{sn:obj.sn.value},
dataType: 'html',
async : true,
timeout: 1000,
error: function(){
//如果ajax出错则返回false
return false;
},
success: function(data){
if(data==1) {
//结果为1则返回true
return true;
}else{
//否则返回false
return false;
}
}
});
}
return true
/*问题就出在这里,无论前面的data结果为1或者不为1,那么这里都返回的true*/ }
</script>
//如果ajax出错则返回false
return false;
},
success: function(data){人家都封装好了你还判断啥
if(data==1) {
//结果为1则返回true
return true;
}else{
//否则返回false
return false;
}
}这里的两个 return 仅仅是匿名函数function(data) 的返回
绝对不是checkInput的返回
你还没有理解JS匿名函数、回调函数之类的概念
ajax执行后,通常是异步的,所以不会等待数据返回,就直接往下执行了
学习了,也理解了。
那我把 async 是不是改成false,是不是叫他同步执行。可结果仍然是一样的,因为根据data的值判断的返回只是success后函数本身的返回结果,而不是整个ajax的返回结果。那么现在我如果想根据顶楼的思路作出判断的话?我应该怎么写?
$(document).ready(function(){
/*这里是一些执行的过程,无错*/
});
function checkInput(obj){
var regx = /^[a-zA-Z]+$/;
var result=false; //准备一个变量,用于返回结果.
if(!regx.test(obj.sendtos.value)){
//如果不匹配则返回false
return false;
}else{
//如果匹配则执行下面ajax
$.ajax({
url: url,
type: 'GET',
data:{sn:obj.sn.value},
dataType: 'html',
async : false, // 这里改为同步请求,效果就是执行的时候会卡那么一下.
timeout: 1000,
error: function(){
//如果ajax出错则返回false
result = false; //改为给result赋值.
},
success: function(data){
if(data==1) {
//结果为1则返回true
result = true; //这里改一下.
}else{
//否则返回false
result = false; //还有这里.
}
}
});
}
return result; //返回该结果.
/*问题就出在这里,无论前面的data结果为1或者不为1,那么这里都返回的true*/ }
</script>
因为之前我也这样试过,但怎么也不成功,可是现在思路被你一说,通了之后,改了一下却成功了。谢谢!
可能之前我考虑得某个地方不对吧。。我甚至把整个$.ajax都赋值了,最后$.ajax返回的不是结果,而是一个对象。结贴了,谢谢楼上几位。
然后继续往下执行