总结:1是异步->async:false,2是作用域->定义全局变量。
首先异步,async:false,保证了代码执行的顺序,如果设置为异步true,
如果在参数中,将请求设置为了同步,那么从代码执行顺序上满足了代码所需的返回值,不至于出现先执行后边的程序,由于js中每个函数都会有自己的作用域,所以,产生了跨作用域的返回,导致我们上层函数不能直接接受ajax的返回值。不过定义一个全局变量问题就能解决了,因为不用再考虑作用域的问题。
<script type="text/javascript"> var is_result = false;//全局变量 function check_data(){ var url = "{:U('Ajax/check_data')}"; var admin_name = $("#admin_name").val(); var admin_password = $("#admin_password").val(); if(admin_name && admin_password){ $.ajax({ type:"POST", url:url, async:false,//保证代码执行顺序,同步 data:{admin_name:admin_name,admin_password:admin_password}, datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". success:function(data){ if(data == 1){ is_result = true; }else{ $("#error_msg").html('用户名或密码错误!'); is_result = false; } }, error: function(){ is_result = false; } }); }else{ $("#error_msg").html('用户名和密码不能为空!'); is_result = false; } return is_result; } function show_box(id) { jQuery('.widget-box.visible').removeClass('visible'); jQuery('#'+id).addClass('visible'); } </script>