`
webcode
  • 浏览: 5945937 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

我们来看这样一段代码:

$(function(){

var a =0;

$.getJSON(

<wbr><wbr> "student_toadd",</wbr></wbr>

<wbr><wbr><wbr><wbr>{stunum:10},</wbr></wbr></wbr></wbr>

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

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

a = 10;
});

}
)

alert(a);

});

<wbr></wbr>

你说说看弹出的a是多少?我说:有可能是10,有可能是0。

为毛?

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

<wbr></wbr>

解决办法

var a = 0;

$.ajax({
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> type:<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
"get",

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>dataType:<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>"json",

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>async: false<wbr><wbr><wbr><wbr>// 异步为false</wbr></wbr></wbr></wbr></strong></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>url:<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>"student_toadd",

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>data:{stunum:10},</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

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

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

a = 10;
);
<wbr>});</wbr>

alert(a);<wbr><wbr><wbr></wbr></wbr></wbr>

<wbr></wbr>

这表示,将$.ajax拿到返回值后,在执行后面的js。<wbr><wbr></wbr></wbr>

这样a就是10了。

<wbr></wbr>

这样有什么启发呢?比如我们需要等到返回值在页面绘制一些元素,如果是异步的话,有可能绘制出来的东西是空的。

分享到:
评论

相关推荐

    DWR.xml配置文件说明书(含源码)

    DWR共有三种Creator,最简单的”new”是调用bean的默认构造函数创建实例.”scripted”允许采用其他脚本语言创建实例.如BeanShell.在远程bean的默认构造函数不能进行进一步配置的情况下这种类型的creator比较有用.”...

    jquery插件使用方法大全

    它几乎与 $.get(url, data, success) 等价,不同的是它不是全局函数,并且它拥有隐式的回调函数。当侦测到成功的响应时(比如,当 textStatus 为 "success" 或 "notmodified" 时),.load() 将匹配元素的 HTML 内容...

    Node.js异步I/O学习笔记

    “异步”这个名词的大规模流行是在Web 2.0浪潮中,它伴随着Javascript和AJAX席卷了Web。但在绝大多数高级编程语言中,异步并不多见。PHP最能体现这个特点:它不仅屏蔽了异步,甚至连多线程也不提供,PHP都是以同步...

    超实用的jQuery代码段

    1.9 不可不知的Callback回调 1.10 提高效率的链式(Chaining)操作 1.11 在新窗口中打开链接 1.12 强制在弹出窗口中打开链接 1.13 平滑滚动页面到某个锚点 1.14 阻止文本行换行 1.15 实现iframe高度自适应 1.16 实现...

    python入门到高级全栈工程师培训 第3期 附课件代码

    02 并发并行与同步异步的概念 03 GIL的概念 04 同步锁 05 递归锁 06 同步对象event 07 信号量 08 线程队列 09 生产者消费者模型 10 多进程的调用 第35章 01 进程通信 02 进程池 03 协程 04 事件驱动模型 05 IO模型...

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

Global site tag (gtag.js) - Google Analytics