一.同步和非同步區別
簡單說:同步是阻塞模式,非同步是非阻塞模式。
舉個例子:普通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...