我們問問大神們什麼是ajax非同步,什麼是ajax同步,兩者有什麼區別,或則兩者適用場合有什麼不同。
回複內容:
我們問問大神們什麼是ajax非同步,什麼是ajax同步,兩者有什麼區別,或則兩者適用場合有什麼不同。
同步非同步 和 ajax有什麼關係嗎
Ajax是Asynchronous Javascript And XML的縮寫
本身就是非同步 何談 同步
非同步就是 當前線程請求操作 後天開新線程處理 完畢後 回調結果給當前線程
同步意味著,在執行這段程式的時候,不能接著執行其他代碼,放在Ajax上,就相當於,當你Ajax擷取訊息期間什麼都幹不了,一看就不科學,所以非同步是為了讓他在擷取時可以正常運行其他部分的代碼,然後callback回調處理結果就行了。
在一系列需要執行的事件隊列裡面:
同步操作: 需要編譯器對語句一件件的執行下去,如果某個事件還沒有執行完畢,那麼系統就需要一直等待,直到該事件執行完畢!
非同步作業: 就好比吧這個事件拉出來放到另外一隊,做一個單獨的事情,程式執行到這個非同步時候,會分成兩部分,一部分繼續執行下面的程式,另一部分會單獨去執行這個非同步,互不影響程式載入!
在使用者角度來說,這樣不會讓使用者感覺他在等待響應!
ajax.open方法中,第3個參數是設同步或者非同步。prototype等js類庫一般都預設為非同步,即設為true。
先說下同步的情況下,js會等待請求返回,擷取status。不需要onreadystatechange事件處理函數。而非同步則需要onreadystatechange事件處理,且值為4再正確處理下面的內容。
我自己的理解是這樣的,ajax同步,即向伺服器請求並在此等待伺服器的回應,直到伺服器回應了才繼續往下走;ajax非同步,即向伺服器發送請求後,無需等待伺服器的回應,直接往後走。
舉個例子說明吧。
我們假設有三句語句
method1() 需要0.5秒
$.ajax() 需要2 秒
method2() 需要0.5秒
同步:就是1執行完後,執行2的時候,阻塞,直到ajax全部結束,執行方法3 一共3秒
非同步:執行完1後,2開始執行的同時,3也馬上執行非阻塞,往下走。 理論全部結束 一共 2.5秒
同步=串列,非同步=並行,這樣子。
本來沒有ajax非同步和同步的說法,AJAX本身便是非同步請求資料的意思,但是請求資料還有同步的方式。
即XMLHttpRequest對象包含了同步請求和非同步請求兩種使用方式。當年因為非同步技術給開發帶來了深刻影響,所以AJAX技術火了,人們也習慣把向伺服器請求資料的技術稱為AJAX,但實際上還有同步,只是稱呼上就被叫做了AJAX同步了,約定俗成而已