ajax的true非同步或者false同步
ajax簡單介紹介紹過,AJAX指的是非同步 javascript 和 XML(Asynchronous JavaScript and XML)。
這對web開發是一個非常大的進步,可以有效的提高網站的人性化程度,在此之前,如果有比較費時的請求操作,必然會引起程式掛起和停止的現象,使用ajax的非同步操作就無需等待伺服器的響應,而是進行如下操作:
(1).在等待伺服器響應時執行其他指令碼。
(2).當響應就緒後對響應進行處理。
一.關於open()方法:
下面再對open()方法做一下簡單介紹,語法結構如下:
[JavaScript] 純文字檢視 複製程式碼xmlhttp.open(method,url,async);
關於此方法更多內容可以參閱ajax post或者get伺服器請求一章節。
可以看到open()方法具有三個引數,最後一個引數是一個布林值,就是用來規定是否採用非同步方式。
當async=true的時候,也就是規定採用非同步操作,也就是說ajax操作並不會阻塞程式碼的執行,等執行處理完畢通過onreadystatechange事件對響應進行處理,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> function loadXMLDoc(){ var xmlhttp; if (window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest(); } else{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("show").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","demo/ajax/txt/demo.txt",true); xmlhttp.send(); } window.onload=function(){ var obt=document.getElementById("bt"); obt.onclick=function(){ loadXMLDoc(); } } </script> </head> <body> <div id="show"><h2>原來的內容</h2></div> <button type="button" id="bt">檢視效果</button> </body> </html>
上面的程式碼就是進行的一個非同步操作,通過onreadystatechange事件來對響應進行處理。
當async=false的時候,採用的是同步處理,那麼就沒有必使用onreadystatechange事件,把相應的操作程式碼放在send()方法之後即可,程式碼如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET", "demo/ajax/txt/demo.txt", false); xmlhttp.send(); if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { document.getElementById("show").innerHTML = xmlhttp.responseText; } } window.onload = function () { var obt = document.getElementById("bt"); obt.onclick = function () { loadXMLDoc(); } } </script> </head> <body> <div id="show"><h2>原來的內容</h2></div> <button type="button" id="bt">檢視效果</button> </body> </html>
上面的程式碼並沒有採用非同步操作,如果ajax操作比較耗時的話,可能會導致程式碼堵塞的現象,所以不推薦使用。
很多初學者對兩者的差別可能還不夠明瞭,並且上面程式碼也沒有很好的演示這一點,下面就通過兩段程式碼演示一下它們的差別:
程式碼例項一:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { document.getElementById("show").innerHTML = xmlhttp.responseText; } } xmlhttp.open("GET", "demo/ajax/net/Async.aspx", true); xmlhttp.send(); } window.onload = function () { loadXMLDoc(); var odiv = document.getElementById("content"); odiv.innerHTML = "由於是非同步操作,所以不會阻塞當前內容的顯示。"; } </script> </head> <body> <div id="show"><img src="demo/ajax/net/img/wait.gif"></div> <div id="content"></div> </body> </html>
上面的程式碼是非同步操作,所以當ajax請求的程式碼在後臺處理的時候,並不影響其他程式碼的執行,所以等待響應的時候,依然能夠在下面的div中寫入指定的內容,這就是ajax的一個重大有點。
程式碼例項二:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET", "demo/ajax/net/Async.aspx", false); xmlhttp.send(); if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { document.getElementById("show").innerHTML = xmlhttp.responseText; } } window.onload = function () { loadXMLDoc(); var odiv = document.getElementById("content"); odiv.innerHTML = "由於是同步操作,所以會阻塞當前內容的顯示。"; } </script> </head> <body> <div id="show"><img src="demo/ajax/net/img/wait.gif"></div> <div id="content"></div> </body> </html>
上面的程式碼在進行ajax後臺操作的時候,並不能執行下面的程式碼,只能等待處理完畢,再去執行後面的程式碼。
相關文章
- true || false && falseFalse
- onerror事件處理函式返回false或者true的作用Error事件函式False
- AJAX同步和非同步區別非同步
- null >=0 ? true:falseNullFalse
- WPF ClipToBounds True or falseFalse
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- Ruby中的true和falseFalse
- AJAX資料互動中的同步非同步非同步
- 同步、非同步、阻塞、非阻塞的區別非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- AJAX 非同步請求非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- AJAX的同步返回結果值
- Python解惑:True與FalsePythonFalse
- true--按了整數鍵, false--按了非整數鍵False
- 反向Ajax之非同步Servlet非同步Servlet
- AJAX 非同步(JavaScript 和 XMLHTTP)非同步JavaScriptXMLHTTP
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 怎樣理解阻塞非阻塞與同步非同步的區別?非同步
- Ajax 資料非同步互動非同步
- 從同步原語看非阻塞同步以及Java中的應用Java
- 對於同步、非同步、阻塞、非阻塞的幾點淺薄理解非同步
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- Socket程式設計中的同步、非同步、阻塞和非阻塞(轉)程式設計非同步
- js判斷true和false一覽JSFalse