前端技术分享,欢迎关注!

前端技术分享论坛

 找回密码
 注册帐号

QQ登录

只需一步,快速开始

查看: 12106|回复: 2
打印 上一主题 下一主题

js执行顺序问题-同步请求、异步请求区别

[复制链接]

127

主题

146

帖子

1146

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1146
跳转到指定楼层
楼主
发表于 2013-8-29 09:52:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. <a href = "10481.html" title = "即将上线" class = "popup_links">即将上线</a>
  2.         <div class="conWindow">
  3.             <!-- ajax请求内容预留位置 -->
  4.         </div>
  5.         <script type="text/javascript">
  6.         $(function() {
  7.             var artCont,
  8.             $('.popup_links').each(function(index, val) {
  9.                 $(this).click(function() {
  10.                     artCont = $(this).attr("href");
  11.                     $(".conWindow").load(artCont, function(responseText, textStatus, xmlHttpRequest) {
  12.                         alert("第1个alert,这是ajax异步请求!");
  13.                     })
  14.                     alert("第2个alert!");
  15.                     return false;
  16.                 }).click();
  17.             })
  18.         });
  19.         </script>
复制代码
上面的代码,会先弹alert("第2个alert!");再弹alert("第1个alert,这是ajax异步请求!"); js不是按代码顺序由上到下执行的吗?而我原意也是想先弹第1个alert,再弹第2个alert。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

127

主题

146

帖子

1146

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1146
沙发
 楼主| 发表于 2013-8-29 10:33:24 | 只看该作者
ajax默认都是异步请求的。

首页得理解同步请求跟异步请求两者间的区别
同步请求:提交请求->等待服务器处理->处理完毕返回, 同步请求将锁住浏览器, js语句按代码顺序由上到下执行,上面的语句没执行完,下面的语句是无法运行的!

异步请求: 请求通过事件触发->服务器处理(不会阻塞主线程,而会建立一个新的线程来操作,这时浏览器同时可以处理其它事情)->处理完毕  js语句不再按代码先后顺序由上到下执行,ajax请求执行的会同时执行ajax语句后面的js命令。

这就很好理解为什么上面代码运行结果是“先弹alert("第2个alert!");再弹alert("第1个alert,这是ajax异步请求!")”


127

主题

146

帖子

1146

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1146
板凳
 楼主| 发表于 2013-8-29 11:32:06 | 只看该作者
又想用ajax,又想先弹第1个alert,再弹第2个alert,有2种方法

方法1:
将ajax后面的js语句提到ajax的回调函数中执行,代码如下:
  1. <a href = "10481.html" title = "即将上线" class = "popup_links">即将上线</a>
  2.         <div class="conWindow">
  3.             <!-- ajax请求内容预留位置 -->
  4.         </div>
  5.         <script type="text/javascript">
  6.         $(function() {
  7.             var artCont,
  8.             $('.popup_links').each(function(index, val) {
  9.                 $(this).click(function() {
  10.                     artCont = $(this).attr("href");
  11.                     $(".conWindow").load(artCont, function(responseText, textStatus, xmlHttpRequest) {
  12.                         alert("第1个alert,这是ajax异步请求!");
  13.                         <b>alert("第2个alert!");</b>
  14.                     })
  15.                     return false;
  16.                 }).click();
  17.             })
  18.         });
  19.         </script>
  20. </body>
复制代码
如上代码加粗部分所示!如果使用$.ajax()方法,可使用下列形式使用success回调函数
  1. $.ajax({
  2. success:function(){
  3. alert("第2个alert!");
  4. }
  5. })
复制代码
方法2:
弃用$.load(),改用$.ajax(),方便将ajax请求设置成同步请求,具体代码如下:
  1. <a href = "10481.html" title = "即将上线" class = "popup_links">即将上线</a>
  2.         <div class="conWindow">
  3.             <!-- ajax请求内容预留位置 -->
  4.         </div>
  5.         <script type="text/javascript">
  6.         $(function() {
  7.             var artCont;
  8.             $('.popup_links').each(function(index, val) {
  9.                 $(this).click(function() {
  10.                     artCont = $(this).attr("href");
  11.                     $.ajax({
  12.                         url:artCont,
  13. <b>                        async:false</b>,/*默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为  false。注意,<b>同步请求将锁住浏览器,直至执行完ajax回调函数才会再去执行ajax后面的js语句</b>*/
  14.                         success: function(XHRtxt,TS){//回调函数
  15.                             $(".conWindow").html("ajax已改成同步请求,请求状态:"+TS+"<br/>请求内容:"+XHRtxt);
  16.                             alert("第1个alert,这是ajax异步请求!");
  17.                         }
  18.                     });
  19.                     alert("第2个alert!");
  20.                     return false;
  21.                 }).click();
  22.             })
  23.         });
  24.         </script>
复制代码
解决问题的关键,得知道同步请求、异步请求两者间的区别!




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

QQ|小黑屋|手机版|Archiver|前端技术分享 ( 粤ICP备20056750号  

GMT+8, 2024-5-7 18:55 , Processed in 0.238350 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表