当前位置: 首页 > web >正文

XMLHttpRequest 异步方式和同步方式

一.同步和异步区别

  简单说:同步是阻塞模式,异步是非阻塞模式。

  举个例子:普通B/S模式(同步)AJAX技术(异步)
    同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
    异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

二.XMLHttpRequest 异步方式和同步方式

1
2
xmlHttp.open( "GET" , url,  false ); //同步方式请求 
xmlHttp.open( "GET" , url,  true ) //异步

 三.项目举例

     在项目中有时候需要用到XMLHttpRequest,但是什么时候用同步,什么时候用异步,这个有时候差距看不出来,但是有时候错误出现了,还不知道什么原因,有时候正确,有时候执行有错误了。

     以使用XMLHttpRequest来进行上传文件做测试,我们需要先上传文件到服务器,然后保存表单信息并保存上传文件的url。

     以下是正确代码,使用了同步方式。

1
2
3
4
5
6
var  fd =  new  FormData();
fd.append( "fileToUpload" , top.window.document.getElementById( 'fileToUpload' ).files[0]);
var  xhr =  new  XMLHttpRequest();
xhr.open( "POST" , WEB +  "/Thesis/ImportPdf" , false ); //上传文件到服务器
xhr.send(fd);
xhr.addEventListener( "load" , uploadComplete(dialog),  false );  //上传完毕后,保存表单信息以及上传文件路径信息            

     上面代码有两处需要往下执行,分别是:xhr.open("POST", WEB + "/Thesis/ImportPdf",false);和xhr.addEventListener("load", uploadComplete(dialog), false);

     如果我们使用xhr.open("POST", WEB + "/Thesis/ImportPdf",true);//异步方式,如果文件小,可能照常本来第二步需要保存路径信息也能取到,但是文件太大,上传需要时间。异步的话,第一步上传文件还没上传完毕,第二步就执行了,但最终我们获取不到上传文件路径信息。所以需要使用阻塞式的同步方式。

http://www.xdnf.cn/news/11287.html

相关文章:

  • 如何在默认打开方式中去掉已失效或者已删除的应用选项
  • C++实现11平台魔兽全图外挂
  • oracle exits 的用法,oracle中的exists和not exists和in用法详解
  • Windows Live Messenger (MSN) 9.0 错误代码 80040154 解决
  • linux源代码存放在哪个目录_Linux 各目录详细介绍
  • Android 设置边距总结
  • 使用c语言实现传输的流量控制
  • 大数的四则运算-(加法、减法、乘法、除法)
  • 高通 MSM 8916与MSM8926芯片的区别
  • 磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点
  • 【硬件设计】DC-DC之降压(BUCK)电路
  • HTML(Hyper Text Mark-up Language )即超文本标记语言
  • 药学【11】
  • ConnectionString 属性尚未初始化。问题的最直接解决方案!
  • to_char 详解
  • 利用aapt.exe查看apk的信息
  • 毕业答辩PPT制作和讲述要点(整理)
  • 什么是局域网(内网)?什么是广域网(外网)?
  • CSS网页制作布局实例教程
  • iheartradio android,最牛电台iHeartRadio
  • 使用PHP实现页面跳转和分页功能
  • 非常详细的启动光盘制作教程-菜鸟版
  • 存储过程语法及实例
  • 【Android】SDK安装及配置
  • 软件设计中的易用性
  • python网页爬虫之re库及正则表达式(含实例)
  • 国内优质堡垒机厂商大揭秘!你知多少!
  • 使用AntiSamy防范XSS跨站脚本攻击
  • 获取流媒体地址
  • android:layout_height fill_parent,如何区分Android wrap_content和fill_parent的详细说明