• 关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题


         前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以要在submit前先请求一次,验证帐号是否已被使用,

    中间有一段js如下:

     var state = false;
        $.post(url,{username:username},function(data){
            if(!data){
                $('#username').removeClass().addClass('notpass');
                $('#usernameSpan').html("<font color='red'>*该帐号已被使用!</font>");
            }else{
                $('#username').removeClass().addClass('pass');
                $('#usernameSpan').html("<font color='green'>√ 通过</font>");
                state = true;
            }
        });
        return state;

    可是不管data为真还是为假,返回值均为false,让我相当郁闷,后来在网上查了下资料,原来这是ajax异步调用导致的。

    以前一直不太懂ajax异步调用的原理,后来仔细看了下别人的讲解,才算明白。所谓ajax异步调用就是当用户提交ajax请求的时候,不会等待请求的返回结果,跳过ajax代码块,继续往下执行(post请求也是ajax请求的一种,是一种简化版)。针对这段代码,就是初始state为fasle,而发送一个post请求之后,因为不会等待返回结果,所以中间的if--else 判断还未执行,所以返回的state此时为false。

           那怎么让它等待返回结果之后,在继续往下执行呢?有两种方法:

          第一种:在一开始把ajax请求设置为同步的,因为ajax请求默认为异步的。即把async 属性设置为false;设置全局的代码如下:

        $.ajaxSetup({
        async : false
        });

        第二种是在请求中设置,即只设置某个方法为同步的,那么该方法就会等待返回结果,其它方法仍然为异步的。代码如下:

       $.ajax({

            type: "POST",

            async : false,

            url: url,

            success: function(data){

               alert( msg );

            }

        });

  • 相关阅读:
    古典密码-移位密码|埃特巴什密码Atbash
    古典密码-凯撒密码Caeser
    古典密码-维吉尼亚密码Vigenere
    使用kubeadm搭建一个k8s集群
    用户态线程和内核态线程的区别
    模板合集
    NoteExpress 章节合并后如何更新参考文献列表?
    CSDN 博客园主题
    GShang的博客园2020年终总结
    【比赛记录】CodeChef January Challenge 2021
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298919.html
Copyright © 2020-2023  润新知