zoukankan      html  css  js  c++  java
  • XMLHttpRequest 异步方式和同步方式

    一.同步和异步区别

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

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

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

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

     三.项目举例

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

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

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

                    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);//异步方式,如果文件小,可能照常本来第二步需要保存路径信息也能取到,但是文件太大,上传需要时间。异步的话,第一步上传文件还没上传完毕,第二步就执行了,但最终我们获取不到上传文件路径信息。所以需要使用阻塞式的同步方式。

  • 相关阅读:
    激活函数
    深度学习各种环境问题积累
    读研期间如何确定论文方向?欢迎批评
    英文论文如何看?转自知乎
    最小函数依赖
    范式
    数据库中的无损连接分解和是否保持函数依赖的判定
    无损连接性、保持函数依赖1
    用CMD杀死进程
    读取properties文件
  • 原文地址:https://www.cnblogs.com/bugzone/p/XMLHttpRequest.html
Copyright © 2011-2022 走看看