ajax的异步加载和return的失效

来源:互联网 发布:人工智能对社会 编辑:程序博客网 时间:2024/06/08 01:28

         在开发中,我在做一个很简单的功能,验证码校验并提交表单,在做这个功能时,遇到里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执行成功后才会被执行。

0 0
原创粉丝点击