ajax回调函数执行顺序带来的同步异步问题

我们来看这样一段代码:

$(function(){

var a =0;

$.getJSON(

   "student_toadd",

    {stunum:10},

    function(json,status)
    {
           $.each(json,function(i){
                      $('#stuDiv').append("<div>学生学号:"+json[i].num+"</div>" );
            }

            ......................................... 

           a = 10;
        });

    }
)

alert(a);

});

你说说看弹出的a是多少?

我说:有可能是10,有可能是0。

因为ajax的执行是异步的,有可能回调函数还没有拿到返回值,就弹出a了。

 

解决办法

var a = 0;

$.ajax({
          type: "get",

         dataType: "json",

        async: false    // 异步为false

         url: "student_toadd",

         data:{stunum:10},

         success:function(json,status)
                        {
                                  $.each(json,function(i){
                                          $('#stuDiv').append("<div>学生学号:"+json[i].num+"</div>" );
                                   }

                                  ......................................... 

                                  a = 10;
                        );
 });

alert(a);   

这表示将$.ajax拿到返回值后,在执行后面的js。这样a就是10了。这样有什么启发呢?比如我们需要等到返回值在页面绘制一些元素,如果是异步的话,有可能绘制出来的东西是空的。

 

 

时间: 2024-11-01 13:11:30

ajax回调函数执行顺序带来的同步异步问题的相关文章

jQuery AJAX回调函数this指向问题_javascript技巧

如在全局作用域调用一个含this的对象,此时当前对象的this指向的是window.为了让this的指向符合自己的意愿,JavaScript提供了两个方法用以改变this的指向,它们是call和apply,当然也有利用闭包来实现的方法.本文通过一个例子来说明这些问题. 先看一段演示代码,这代码只供演示用,没有实际意义. 复制代码 代码如下: //一个没有实际意义的socket连接对象 var socket = { connect: function(host, port) { alert('Co

jquery中ajax函数执行顺序问题之如何设置同步

 这篇文章主要介绍了jquery中ajax函数执行顺序问题之如何设置同步,需要的朋友可以参考下 JavaScript code  代码如下: function existProduct(obj){    var productname = escape(obj.val());  $.getJSON("../product/searchProductByName.action",datat,function(data){  var falg;  falg = data[0]['exist

ajax回调函数不执行 请输入长度为10-50-50的问题标

问题描述 ajax回调函数不执行 请输入长度为10-50-50的问题标 <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <html> <head> <script type="text/javascript" src="js/jquery-1.7.2.js"></scr

【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数

问题1: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:    问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法不认识最后返回的是给ajax的data,而是以为要去找这个页面所以并未找到!! 1 @RequestMapping("/queryAllDisease") 2 @ResponseBody 3 public PageInfo<Disease> queryAllDisease

解决ajax回调函数返回的字符串乱码问题

  ajax回调函数,返回的字符串乱码问题很是让人痛恨,下面有个不错的解决方法,大家可以参考下 ServletActionContext.getResponse().setContentType("text/json;charset=UTF-8");//解决乱码问题,没有这句,回调函数的内容可能乱码 ServletActionContext.getResponse().getWriter().write("字符串内容");//在写入之前执行上面一句,可以解决乱码  

ajax回调函数获取不到后台session里边的值

问题描述 ajax回调函数获取不到后台session里边的值 解决方案 又是一个没有搞清楚session在哪里的代码.教科书写明,session是服务器端的对象,也就是说,在浏览器端是取不到session的,也就是说,在浏览器端执行的JS代码是不可能调用到服务器端的session对象.所以,你那个alert()是后执行的,在alert执行时,session已经执行完毕,由于u是一个对象,在你使用<%=的方式进行输出时,自动调用toString()方法,如果你没有重写过这个方法,应该是得到一个&quo

ajax-jQuer easyui里怎么在一个请求的回调函数执行后再处理接下来的操作

问题描述 jQuer easyui里怎么在一个请求的回调函数执行后再处理接下来的操作 $("#pandv").treegrid('expand',parentID); if($("#pandv").treegrid('getChildren',parentID).length!=$("#pandv").treegrid('find',parentID).versionCount){ if(!$("#pandv").treegr

Javascript基于AJAX回调函数传递参数实例分析_javascript技巧

本文实例讲述了Javascript基于AJAX回调函数传递参数的方法.分享给大家供大家参考,具体如下: 前面介绍了<javascript实现html页面之间参数传递的四种方法>,这里针对ajax参数传递做一分析. 在Javascript 中,特别是在AJAX中,回调函数常常是一个函数名,没有地方放入参数,如下面的AJAX代码,在成功后将调用回调函数callback,但callback是有参数的,如何把参数传进来呢? var callback = function(p1){ //do somet

JS 中AJAX回调函数success内的代码执行问题,有时执行,有时不执行

问题描述 在body中<asp:ButtonID="Button1"runat="server"Text="查询"OnClientClick="javascript:returnreport();"/>在<script>中functionreport(){Ext.Ajax.request({url:"/XFStatbyDay/XFStatbyDay",success:function