您的位置:首页 > Web前端 > JavaScript

ajax的异步加载和return的失效

2017-04-27 19:52 225 查看
         在开发中,我在做一个很简单的功能,验证码校验并提交表单,在做这个功能时,遇到里ajax的这2个问题:return无效,执行顺序不符合我的预期。以前也遇到类似的问题,但是解决之后没去总结,也没去细究其中的原理和原因。这样没有起到积累知识的作用,再次遇到不一定能记起,今天总结记录一下。

         AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

         ajax作为前端和后台交互的一种方式,使用起来很方便。但是ajax是异步加载的,所以在js里的执行顺序,不一定按照你想的那样顺序去执行。还有ajax里success里的return方法,也不一定如你所希望的那样结束方法,返回你需要的值。只要理解ajax的异步加载的特性,这些问题就很好解决了。还有一点,ajax最大的特性是页面无刷新获取服务器数据,用它做不了页面跳转,可以用window.location.href跳转。   

        两个问题的原因其实是用一个,那就是ajax是异步的。

       return无效。我当时写的是一个alidator校验手机验证码,验证通过则进行下面的表单提交,结果它并没有验证,直接去提交表单了。解决方法很简单,返回不要写在ajax里面,写在外面。

function register(){
if(validator()){
$("#register").submit();
}
}
//改进前
function validator(){
var code = $("#code").val();
$.ajax({
type: "post",
url: "/register/validatorm",
data: {code:code},
dataType: "text",
success: function(data){
if(data.success){
return true;
}else{
return false;
}
},
error: function() {
return false;
}
});
}
//改进后
function validator(){
var code = $("#code").val();
var flag = false;
$.ajax({
type: "post",
url: "/register/validatorm",
data: {code:code},
dataType: "text",
success: function(data){
if(data.success){
flag = true;
}else{
flag = false;
}
},
error: function() {
flag = false;
}
});

if(flag){return true;}else{alert("验证码错误");return;}
}
       另一个问题,不按我预期的顺序执行。我当时需要执行2个判断,然后进行业务提交。当时需要写了2个ajax,结果执行结果很糟糕,逻辑顺序乱成一团。解决方法依然很简单,ajax嵌套。一个ajax的success里,写另一个ajax,则它一定只会在这个ajax执行成功后才会被执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息