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);//異步方式,如果文件小,可能照常本來第二步需要保存路徑信息也能取到,但是文件太大,上傳需要時間。異步的話,第一步上傳文件還沒上傳完畢,第二步就執行了,但最終我們獲取不到上傳文件路徑信息。所以需要使用阻塞式的同步方式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM