zoukankan      html  css  js  c++  java
  • 关于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 );

            }

        });

  • 相关阅读:
    java基础笔记-类与对象(多态)
    oracle中trim,ltrim,rtrim函数用法
    git stash
    update from select
    oracle 查看主外键约束
    eclipse git 解决冲突
    根据Request获取客户端IP
    简单说说Spring Security 使用(附加验证码登录,自定义认证)
    linux的nohup命令的用法
    Python包管理工具介绍
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298919.html
Copyright © 2011-2022 走看看