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

        }

    });

上一篇:在linux平台下,设置core dump文件属性(位置,大小,文件名等)


下一篇:C# 模拟Windows键盘事件