Ajax请求中的async:false/true的区别

官方的解释是:

async Boolean Default: true 

By default, all requests are sent asynchronous (e.g. this is set to true by default). If you need synchronous requests, set this option to false. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

 

async. 默认是true,即为异步方式,$.Ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax里的success方法,这时候执行的是两个线程。若要将其设置为false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

 

jsp页面:

function judgeSupplierAssessment(){

        var result = false;

        var quote_list_id = $("input[name='quote_list_id']").val(); 

        var product_id=$("#product_id").val();

        var url = "<s:url value='/quote/quoteprice!checkSupplierAssessment.action'/>?  

                                quote_list_id="+quote_list_id+"&product_id="+product_id;

        

        $.ajax({

                url:encodeURI(url),// 处理中文乱码。

                type:"POST",       // 请求的方式:"POST" 或者 "GET"

                dataType:"json",   // 数据返回的格式

                async:false,

                success :function(obj){

                        var flag = obj['flag'];

                        if(flag == '1'){

                                result =true;

                        }

                },

                error:errorCallBaxk// 请求失败后回调函数

        });

        return result;

        alert(result);

}

这个ajax请求为同步请求,在没有返回值之前,alert(result)是不会执行的。

如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句。

后台代码:

public String checkSupplierAssessment() throws IOException{

        HttpServletRequest request = Struts2Utils.getRequest();

        SystemUser systemUser = getUser(request);

        String pro_id = request.getParameter("product_id");

        String quote_list_id = request.getParameter("quote_list_id");

        PrintWriter out = Struts2Utils.getResponse().getWriter();

        HttpServletResponse response = Struts2Utils.getResponse();

        Map<String, String> map = new HashMap<String, String>();

        String flag = orderQuoteService.judgeSupplierAssessment         

                                             (pro_id,quote_list_id,systemUser);

        map.put("flag", flag);

        Gson gson = new Gson();

        String json = gson.toJson(map);

        response.setHeader("Cache-Control""no-cache");

        response.setContentType("text/json;charset=utf-8");

        out.print(json);

        out.flush();

        return null;

}