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 );

            }

        });

  • 相关阅读:
    PHP数组(数组正则表达式、数组、预定义数组)
    面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
    uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
    LA4329 Ping pong 树状数组
    HDU 1257 最少拦截系统
    HDU 1260 Tickets
    codeforce 621D
    codeforce 621C Wet Shark and Flowers
    codeforce 621B Wet Shark and Bishops
    codeforce 621A Wet Shark and Odd and Even
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298919.html
Copyright © 2011-2022 走看看