ajax:怎么获得onreadystatechange调用的函数的返回值?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ajax:怎么获得onreadystatechange调用的函数的返回值?

2016-03-11 14:11:37 4052 1

这里的checkName()w为什么不能是我所期待的返回值(true/false),怎么获得chekName()的返回值,在使用ajax的基础上?求高人指点,
刚开始学习使用ajax进行表单验证;遇到这种问题不知道怎么解决?

,表单的内容是这样的,下面是几个主要的验证函数,
function checkName(){  
    var name=ele.name.value;    
    if(name!= ""){ 
            xmlhttp=new XMLHttpRequest();
                url="http://localhost/chkname.php";        
            xmlhttp.onreadystatechange =function(){
                if(xmlhttp.readyState == 4){
                    if(xmlhttp.status == 200){
                        var msg = xmlhttp.responseText;
                        if(msg == '1'){                            
                              ele.name.className="";//移除class
                              ele.imgs[0].setAttribute("src","img/right.jpg"); //对应图标
                              ele.imgs[0].style.display = "inline"; //显示 
                             return true;
                        }else{                            
                              ele.name.className="borderRed";//移除class
                              ele.imgs[0].setAttribute("src","img/wrong.jpg"); //对应图标
                              ele.imgs[0].style.display = "inline"; //显示   
                                biaoqian1.innerHTML='<strong class="tips_false">该用户名已存在</strong>';                         
                               return  false;
                           
                                                
                        }
                    }
                }
            }
            xmlhttp.open('POST',url,true);
            xmlhttp.send(null);
            
    
}
 function check(){ //表单提交则验证开始

         if(checkName()&&checkPassw2()&&checkEmail()){
               alert(" 注册成功");  //注册成功
            return true; 
          }
          else{
              alert("请正确的填写完信息!");
            return false;
          }
    }
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 18:59:11

    异步的ajax实际上使用了单独的进程,因此无法获取到这个返回值,而且,在调用ajax()方法时你根本无法知道它什么时候会执行完毕。 因此对于异步的ajax来说,你无法主动的获取其返回值,只能提供回调方法,ajax对象可以将参数传递到你提供的回调方法中,如上面,自己通过回调函数获得了返回值。

    //ajax验证name

    var ajaxResult = false;//全局变量
        function ajaxResultdeal(response){
            ajaxResult = response; //传递给全局变量    
                if(ajaxResult == '1'){                            
                                      ele.name.className="";//移除class
                                      ele.imgs[0].setAttribute("src","img/right.jpg"); //对应图标
                                      ele.imgs[0].style.display = "inline"; //显示 
                                      ajaxResult= true;
        
                                  }
              else{                        
                                      ele.name.className="borderRed";//移除class
                                      ele.imgs[0].setAttribute("src","img/wrong.jpg"); //对应图标
                                      ele.imgs[0].style.display = "inline"; //显示   
                                        biaoqian1.innerHTML='<strong class="tips_false">该用户名已经存在</strong>';                         
                                      ajaxResult=false;
                                   
                                                        
                                }
                    
                ajaxResultreturn();
            
           
        
        }
        function ajaxResultreturn(){
            if(ajaxResult){return true;}
            else{
                return false;
            }
        }
        
        function toAjax(url,callback){                
                    xmlhttp=new XMLHttpRequest();
                        /*url="http://localhost/chkname.php"; */       
                    xmlhttp.onreadystatechange =function(){
                        if(xmlhttp.readyState == 4){
                            if(xmlhttp.status == 200){                    
                                    if(callback) {
                                       callback(xmlhttp.responseText);
                              
                                }
                            }
                        }
                    }
                    xmlhttp.open('POST',url,true);
                    xmlhttp.send(null);
        }
        
          function checkName(){ 
            var name=ele.name.value;    
            var url="http://localhost/chkname.php";   
               var cb = ajaxResultdeal;       
                    toAjax(url,cb);   
                
           
          
        
          }
          function check(){ //表单提交则验证开始 
    
             if(ajaxResultreturn()&&checkPassw2()&&checkEmail()){
                   alert(" 注册成功");  //注册成功
                return true; 
              }
              else{
                  alert("请正确的填写完信息!");
                return false;
              }
        }
    0 0
相关问答

1

回答

Ajax调用有时有响应,有时没响应?? 报错

2020-06-04 21:18:03 481浏览量 回答数 1

1

回答

Ajax调用有时有响应,有时没响应?? 400 报错

2020-05-30 13:56:35 302浏览量 回答数 1

1

回答

Ajax中http请求是什么呀?

2022-08-17 09:11:07 118浏览量 回答数 1

1

回答

ajax有几种请求方式啊?

2022-08-16 20:40:34 70浏览量 回答数 1

1

回答

原生js ajax请求有几个步骤?分别是什么呢?

2022-08-16 20:10:48 72浏览量 回答数 1

1

回答

flask普通请求正常,ajax请求报错?报错

2020-06-06 09:25:56 233浏览量 回答数 1

1

回答

最近学习vue,其中用到axios发送ajax请求,结果请求是发过去了但是设置不?400报错

2020-06-05 15:49:59 333浏览量 回答数 1

1

回答

java web ajax快还是请求快。? 400 报错

2020-06-05 13:24:36 311浏览量 回答数 1

1

回答

SpringMVC中controller如何接收ajax请求的返回值并完成跳转页面? 400 报错

2020-06-05 13:07:36 517浏览量 回答数 1

1

回答

jq的ajax请求问题 Request Headers Provisional ?报错

2020-06-04 17:38:16 408浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载