前面完成了頁面的跳轉、登入,很多時候不重新整理頁面就想重新整理區域性資料,此時ajax就是此種技術,且是非同步的。
本篇實現網頁內部使用js呼叫ajax實現非同步互動資料。
在js中使用 ajax是通過XMLHttpRequest來實現的。
Ajax即Asynchronous Javascript And XML(非同步JavaScript和XML)在 2005年被Jesse James Garrett提出的新術語,用來描述一種使用現有技術集合的‘新’方法,包括:HTML或XHTML、CSS、JavaScript、DOM、XML、XSLT以及最重要的XMLHttpRequest。使用Ajax技術網頁應用能夠快速地將增量更新呈現在使用者介面上,而不需要過載(重新整理)整個頁面,這使得程式能夠更快地迴應使用者的操作。
Ajax不是一種新的程式語言,而是一種用於建立更好更快以及互動性更強的Web應用程式的技術。使用JavaScript向伺服器提出請求並處理響應而不阻塞使用者核心物件XMLHttpRequest。通過這個物件,JavaScript可在不過載頁面的情況與Web伺服器交換資料,即在不需要重新整理頁面的情況下,就可以產生區域性重新整理的效果。Ajax在瀏覽器與 Web 伺服器之間使用非同步資料傳輸(HTTP 請求),這樣就可使網頁從伺服器請求少量的資訊,而不是整個頁面。
Web應用程式較桌面應用程式有諸多優勢;它們能夠涉及廣大的使用者,它們更易安裝及維護,也更易開發。但是,因特網應用程式並不像傳統的桌面應用程式那樣完善且友好。 通過 Ajax,因特網應用程式可以變得更完善,更友好。
XMLHTTP是一組API函數集,可被JavaScript、JScript、VBScript以及其它web瀏覽器內嵌的指令碼語言呼叫,通過HTTP在瀏覽器和web伺服器之間收發XML或其它資料。XMLHTTP最大的好處在於可以動態地更新網頁,它無需重新從伺服器讀取整個網頁,也不需要安裝額外的外掛。該技術被許多網站使用,以實現快速響應的動態網頁應用。例如:Google的Gmail服務、Google Suggest動態查詢介面以及Google Map地理資訊服務。
XMLHTTP是AJAX網頁開發技術的重要組成部分。除XML之外,XMLHTTP還能用於獲取其它格式的資料,如JSON或者甚至純文字。
使用XMLHttpRequest來傳送HTTP請求以實現網站和伺服器之間的資料交換。
XMLHttpRequest物件是Ajax的核心,它有許多的屬性、方法和事件。
當一個XMLHttpRequest物件被建立後,readyState屬性標識了當前物件的狀態。
responseText屬性包含使用者端接收到的HTTP響應的文字內容。
描述了HTTP狀態程式碼文字,並且僅當readyState屬性值為3或4時才可用。檢測返回結果的判斷就是:
if(readyState===4 && statusText===200)
{
……
}
如我們的Demo:
open(method, url, async, username, password)
呼叫open()方法後,再呼叫send()方法將請求傳送。當open()方法中async引數為true(非同步)時,在send()方法呼叫後立即返回,否則將會中斷直到請求返回。
設定請求的頭部資訊
獲取請求的頭部資訊
onreadystatechange:狀態變化事件
當readyState屬性值發生改變時,就會觸發onreadystatechang事件,程式碼中是依賴onreadystatechang進一步判斷狀態和狀態文字來做處理。
var xhr = new XMLHttpRequest();
xhr.open('GET','/checkState/data',true);
xhr.send();
xhr.onreadystatechange = function() {
if(xhr.readyState === 4 && xhr.status === 200)
{
……
}
}
document.getElementById("dt2").innerHTML = xhr.responseText;
準備之前的demo v1.3.0模板:
下面是新增定時獲取和手動按鈕獲取得html:
新建了一個處理,特別是增加了對於ajax技術的路徑處理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>長沙紅胖子Qt</title>
</head>
<body>
<p><a>這裡是檢測狀態Demo v1.4.0了</a></p>
<p><a id="dt1">123.567</a></p>
<p><a id="dt2">123.567</a></p>
<p><a id="dt3">123.567</a></p>
<p><button onclick="reset()">清空</button></p>
<p><button onclick="getDt1()">獲取</button></p>
<script>
function reset() {
document.getElementById("dt1").innerHTML="---.---";
document.getElementById("dt2").innerHTML="---.---";
document.getElementById("dt3").innerHTML="---.---";
}
function getDt1() {
var xhr = new