ajax怎么返回值?

       function checkUsername(username)
   {
       var check = username.match(/^[a-zA-Z0-9_-]{6,16}$/);
       var ret;
       if(check)
       {

           $.ajax({
               url: '<?php echo base_url('login/ajaxUsernameExist')?>',
               type:'post',
               data:"username = " + username,
               dataType:'json',
               success:function(data){
                   ret = parseInt(data.result);
               },
               error:function(data)
               {
                   ret = 3;
               }
           });

           return ret;
       }
       else
       {
           return 1;
       }
   }

代码如上所示,发现当分支进入ajax中的时候,会出现ret是undefined,请问在$.ajax中对ret赋值没有效果是什么原因?

阅读 12.9k
3 个回答

在 $.ajax({ 里面增加 async:false 变成同步,你的 return 就有效了

这个是因为在执行success函数或者error函数时,上下文已经被切换了。ret在success或者error中就变成未定义的了。你可以将其命名为全局变量。或者使用jQuery Tiny Pub/Sub等技术解决。Good luck.

Ajax的A是什么意思?Asychronous异步。也就是说在你return ret时,success还没有执行,当然会变成undefined了。请理解回调这个概念,然后把你需要使用yet的地方放入一个function中当参数传进checkUsername里面并放入success里面执行,而不是把yet返回出去。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进