XMLHttpRequest 非同步方式和同步方式

2021-07-22 21:29:54 字數 1766 閱讀 3935

一.同步和非同步區別

簡單說:同步是阻塞模式,非同步是非阻塞模式。

舉個例子:普通b/s模式(同步)ajax技術(非同步)

同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事

非同步: 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

二.xmlhttprequest 非同步方式和同步方式 1

2

xmlhttp.open("get", url,false);//同步方式請求

xmlhttp.open("get", url,true)//非同步

三.專案舉例

在專案中有時候需要用到xmlhttprequest,但是什麼時候用同步,什麼時候用非同步,這個有時候差距看不出來,但是有時候錯誤出現了,還不知道什麼原因,有時候正確,有時候執行有錯誤了。

以使用xmlhttprequest來進行上傳檔案做測試,我們需要先上傳檔案到伺服器,然後儲存表單資訊並儲存上傳檔案的url。

以下是正確**,使用了同步方式。

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

XMLHttpRequest 物件詳解

http 請求的狀態.當乙個 xmlhttprequest 初次建立時,這個屬性的值從 0 開始,直到接收到完整的 http 響應,這個值增加到 4。狀態名稱描述0 uninitialized 初始化狀態。xmlhttprequest 物件已建立或已被 abort 方法重置。1open open 方...

Ajax核心 XMLHttpRequest物件

xmlhttprequest 物件是ajax功能的核心,學習xmlhttprequest物件就先從建立xmlhttprequest 物件開始,了解在不同的瀏覽器中建立xmlhttprequest 物件使用不同的方法 以前只是聽說有些瀏覽器不太支援ajax,後來瀏覽器逐漸的相容了這個瀏覽器,現在來看明...

建立xmlhttprequest物件

ie瀏覽器使用activeobject,而其它的瀏覽器使用名為xmlhttprequest內建物件。function createxmlhttprequest catch e catch e catch e 宣告乙個儲存 xmlhttprequest 物件的 xmlhttp 變數。然後使用 xmlh...