<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>

解决方案 »

  1.   

    $.ajax是不是不能像我这样嵌套?必须放在$(document).ready(function(){});里?那我如何用一个函数去判断他的结果呢?
      

  2.   

    无需判断结果就在 error: function(){
                        //如果ajax出错则返回false
                        return false;
                    },
                    success: function(data){人家都封装好了你还判断啥
      

  3.   

    他封装的是ajax这个过程,错误就error正确就success,而我现在要判断的是ajax成功后返回的值。根据这个返回值,来判断下一步的执行操作。而现在的问题是我虽然对返回值判断了也标准了执行的操作,但是貌似ajax无视这个判断,而是直接按为success来处理,而无视了success里的判断。
      

  4.   

    不能这么写的。success: function(data){
                        if(data==1) {
                            //结果为1则返回true
                            return true;
                        }else{
                            //否则返回false
                            return false;
                        }
                    }这里的两个 return 仅仅是匿名函数function(data) 的返回
    绝对不是checkInput的返回
    你还没有理解JS匿名函数、回调函数之类的概念
    ajax执行后,通常是异步的,所以不会等待数据返回,就直接往下执行了
      

  5.   


    学习了,也理解了。
    那我把 async 是不是改成false,是不是叫他同步执行。可结果仍然是一样的,因为根据data的值判断的返回只是success后函数本身的返回结果,而不是整个ajax的返回结果。那么现在我如果想根据顶楼的思路作出判断的话?我应该怎么写?
      

  6.   

    给你个参考改法:<script type="text/javascript">
        $(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>
      

  7.   

    不管怎么样,万分感谢!!
    因为之前我也这样试过,但怎么也不成功,可是现在思路被你一说,通了之后,改了一下却成功了。谢谢!
    可能之前我考虑得某个地方不对吧。。我甚至把整个$.ajax都赋值了,最后$.ajax返回的不是结果,而是一个对象。结贴了,谢谢楼上几位。
      

  8.   

    此言大善 问题就出在这里 error后你执行函数return false 只是退出$.ajax()函数
    然后继续往下执行