Ajax是一種能夠?qū)崿F(xiàn)網(wǎng)頁(yè)內(nèi)容異步刷新的技術(shù),在現(xiàn)代網(wǎng)頁(yè)開(kāi)發(fā)中得到廣泛應(yīng)用。通過(guò)Ajax,我們可以在不刷新整個(gè)頁(yè)面的情況下,實(shí)現(xiàn)部分頁(yè)面的更新。而想要從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面,我們可以結(jié)合Ajax與JavaScript的力量,在不刷新整個(gè)頁(yè)面的情況下實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。
例如,我們有一個(gè)網(wǎng)頁(yè)上的按鈕,當(dāng)用戶點(diǎn)擊該按鈕時(shí),我們希望頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面,而不是重新加載整個(gè)頁(yè)面。使用Ajax,我們可以通過(guò)以下步驟實(shí)現(xiàn)這樣的效果:
<button onclick="loadNewPage()">點(diǎn)擊跳轉(zhuǎn)頁(yè)面</button> <script> function loadNewPage() { var xhr = new XMLHttpRequest(); // 創(chuàng)建一個(gè)Ajax對(duì)象 xhr.open("GET", "newpage.html", true); // 發(fā)送GET請(qǐng)求,獲取新頁(yè)面的內(nèi)容 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 當(dāng)請(qǐng)求成功完成時(shí) var response = xhr.responseText; // 獲取服務(wù)器返回的響應(yīng)內(nèi)容 document.open(); // 打開(kāi)一個(gè)新的空白頁(yè)面 document.write(response); // 在新頁(yè)面中寫入服務(wù)器返回的響應(yīng)內(nèi)容 document.close(); // 關(guān)閉寫入流 } }; xhr.send(); // 發(fā)送請(qǐng)求 } </script>
在上面的代碼中,我們首先創(chuàng)建了一個(gè)按鈕,添加了一個(gè)點(diǎn)擊事件的監(jiān)聽(tīng)函數(shù)loadNewPage()
。當(dāng)用戶點(diǎn)擊按鈕時(shí),loadNewPage()
函數(shù)會(huì)被執(zhí)行。在該函數(shù)中,我們創(chuàng)建了一個(gè)XMLHttpRequest
對(duì)象,它是Ajax的核心。通過(guò)open()
方法發(fā)送一個(gè)GET請(qǐng)求,這里的URL指向我們想要跳轉(zhuǎn)的頁(yè)面newpage.html
。
在xhr.onreadystatechange
的回調(diào)函數(shù)中,我們判斷了Ajax請(qǐng)求是否成功完成,即readyState
為4,status
為200。只有在請(qǐng)求成功完成時(shí),我們才將服務(wù)器返回的響應(yīng)內(nèi)容寫入一個(gè)新的空白頁(yè)面中,并關(guān)閉寫入流,實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。
通過(guò)以上代碼,當(dāng)用戶點(diǎn)擊了按鈕,頁(yè)面會(huì)跳轉(zhuǎn)到newpage.html
,而無(wú)需刷新整個(gè)頁(yè)面。
除了使用Ajax發(fā)送GET請(qǐng)求,我們也可以使用POST請(qǐng)求實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。例如,以下代碼片段演示了如何通過(guò)Ajax發(fā)送POST請(qǐng)求并跳轉(zhuǎn)到另一個(gè)頁(yè)面:
<button onclick="loadNewPage()">點(diǎn)擊跳轉(zhuǎn)頁(yè)面</button> <script> function loadNewPage() { var xhr = new XMLHttpRequest(); // 創(chuàng)建一個(gè)Ajax對(duì)象 xhr.open("POST", "newpage.html", true); // 發(fā)送POST請(qǐng)求,獲取新頁(yè)面的內(nèi)容 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // 設(shè)置請(qǐng)求頭 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 當(dāng)請(qǐng)求成功完成時(shí) var response = xhr.responseText; // 獲取服務(wù)器返回的響應(yīng)內(nèi)容 document.open(); // 打開(kāi)一個(gè)新的空白頁(yè)面 document.write(response); // 在新頁(yè)面中寫入服務(wù)器返回的響應(yīng)內(nèi)容 document.close(); // 關(guān)閉寫入流 } }; xhr.send(); // 發(fā)送請(qǐng)求 } </script>
在上述代碼中,我們使用了相同的方式創(chuàng)建了一個(gè)XMLHttpRequest對(duì)象,并發(fā)送了一個(gè)POST請(qǐng)求,將請(qǐng)求頭中的Content-type
設(shè)置為application/x-www-form-urlencoded
。其余部分與GET請(qǐng)求的代碼類似。
總結(jié)來(lái)說(shuō),通過(guò)結(jié)合Ajax和JavaScript,我們可以實(shí)現(xiàn)在不刷新整個(gè)頁(yè)面的情況下,從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面。無(wú)論是使用GET還是POST請(qǐng)求,都可以通過(guò)Ajax實(shí)現(xiàn)這樣的頁(yè)面跳轉(zhuǎn)效果。