在Web開發(fā)中,與服務(wù)器進行異步交互是非常常見的需求,而JavaScript中的Ajax技術(shù)正是用來實現(xiàn)這個需求的。簡單來說,Ajax(Asynchronous JavaScript and XML)是一種利用JavaScript實現(xiàn)與服務(wù)器異步通信的技術(shù),JavaScript通過XMLHttpRequest對象來發(fā)送請求和接收響應(yīng),通過DOM來實現(xiàn)頁面更新。
使用Ajax可以實現(xiàn)頁面無刷新更新數(shù)據(jù)、提高用戶交互體驗,比如想實現(xiàn)一個在線搜索的功能,在用戶輸入關(guān)鍵字后即時返回匹配的結(jié)果,通過Ajax可以在不刷新頁面的情況下實現(xiàn)該功能,讓用戶可以很流暢地進行搜索。還有一個例子是用戶在購物車頁面改變產(chǎn)品數(shù)量時,Ajax可以更新購物車中對應(yīng)的總價格,用戶就不必頻繁刷新頁面獲取最新的價格信息。
//使用Ajax實現(xiàn)搜索功能 var xhr = new XMLHttpRequest(); xhr.onreadystatechange=function(){ if (xhr.readyState==4 && xhr.status==200){ document.getElementById("searchResult").innerHTML=xhr.responseText; } } xhr.open("GET","search.php?keyword="+document.getElementById("keywordInput").value,true); xhr.send();
Ajax的核心是通過XMLHttpRequest對象來發(fā)送異步請求,請求可以采用POST或GET方法,根據(jù)需要可以通過URL傳遞參數(shù)。XMLHttpRequest的onreadystatechange事件處理函數(shù)會在服務(wù)器響應(yīng)發(fā)生變化時被調(diào)用,可以通過readyState屬性來獲取當(dāng)前狀態(tài),狀態(tài)碼0表示請求尚未初始化,1表示服務(wù)器連接已建立,2表示請求已接收,3表示正在處理請求,4表示請求已完成并且響應(yīng)已準備好。通常在readyState狀態(tài)碼為4時,再判斷響應(yīng)狀態(tài)碼是否為200,表示請求成功。
除了使用原生的XMLHttpRequest對象,使用第三方庫也可以獲得更便捷的Ajax開發(fā)體驗,比較流行的有jQuery提供的$.ajax()方法和fetchAPI。下面以jQuery的$.ajax()為例:
//使用jQuery的$.ajax()實現(xiàn)搜索功能 $.ajax({ type:'GET', url:'search.php', data:{keyword:$('#keywordInput').val()}, success:function(data){ $('#searchResult').html(data); } });
使用$.ajax()可以將請求數(shù)據(jù)和返回數(shù)據(jù)都制定成json格式,也可以對錯誤進行處理,而且jQuery對不同的瀏覽器的實現(xiàn)做了封裝,使用起來比原生的XMLHttpRequest更加方便。不過,使用第三方庫也增加了代碼的復(fù)雜度,有時可能會影響性能。因此,對于簡單的Ajax請求,原生的XMLHttpRequest足以勝任。