使用JavaScript實現(xiàn)頁面局部更新的方法總結
在 JavaScript 中,Ajax(Asynchronous JavaScript and XML)是一種用于在后臺與服務器進行異步通信的技術。它允許在不刷新整個頁面的情況下,通過發(fā)送 HTTP 請求和接收服務器返回的數(shù)據,實現(xiàn)局部更新頁面內容的功能。
通過 Ajax,可以實現(xiàn)以下功能:
- 異步加載數(shù)據:可以使用 Ajax 請求從服務器獲取數(shù)據,然后在頁面上進行動態(tài)展示,而無需刷新整個頁面。這在處理大量數(shù)據或需要頻繁更新數(shù)據的場景中非常有用。
- 表單提交:可以使用 Ajax 將表單數(shù)據以異步方式發(fā)送到服務器,然后根據服務器返回的響應進行相應的處理,而無需頁面刷新。
- 動態(tài)內容更新:可以使用 Ajax 獲取最新的數(shù)據,并將其插入到頁面中的特定位置,從而實現(xiàn)動態(tài)內容的更新。
在 JavaScript 中,可以通過原生的 XMLHttpRequest 對象來實現(xiàn) Ajax 請求,也可以使用更高級的封裝庫(如 jQuery 的 $.ajax() 方法、axios、fetch 等)來簡化 Ajax 請求的操作。這些封裝庫提供了更方便的方法和更好的跨瀏覽器兼容性。
使用原生 XMLHttpRequest 對象發(fā)送 Ajax 請求
以下是一個使用原生 XMLHttpRequest 對象發(fā)送 Ajax 請求的示例:
<button id = "btn">獲取新歌</button> <ul id='ul'> </ul> <script> let btn = document.getElementById('btn') btn.addEventListener('click',() =>{ //發(fā)送一個http請求 let xhr = new XMLHttpRequest() xhr.open('GET','http://192.168.31.26:3000/top/song?type=7',true) xhr.onreadystatechange = () =>{ if(xhr.readyState === 4 && xhr.status === 200){ // console.log(JSON.parse(xhr.responseText)); //響應體 const result = JSON.parse(xhr.responseText).data for(let key in result){ // result[key].name const li = document.createElement('li') //動態(tài)創(chuàng)建DOM結構 li.innerText = result[key].name document.getElementById('ul').appendChild(li) } } } xhr.send() }) </script>
- 首先,通過let btn = document.getElementById('btn')獲取id為"btn"的按鈕元素。
- 然后,通過btn.addEventListener('click',() => { ... })給按鈕添加了一個點擊事件的監(jiān)聽器。也就是說,當按鈕被點擊時,會執(zhí)行后面的箭頭函數(shù)中的代碼。
- 在點擊事件的處理函數(shù)中,首先創(chuàng)建了一個新的XMLHttpRequest對象,即let xhr = new XMLHttpRequest()。XMLHttpRequest對象用于在后臺與服務器交換數(shù)據,可以在不重新加載整個頁面的情況下更新頁面的部分內容。
- 調用xhr.open('GET',''http://192.168.31.26:3000/top/song?type=7' ',true)方法初始化一個新的請求。這里指定了請求的方式為GET,請求的URL為('http://192.168.31.26:3000/top/song?type=7' ) ,這里我們要注意,由于瀏覽器的安全策略限制,Ajax 請求只能與同源的 URL 進行通信,或者使用 CORS(跨域資源共享)進行跨域請求。最后一個參數(shù)指定為true表示使用異步請求。這意味著頁面會在等待服務器響應的同時繼續(xù)執(zhí)行其他腳本,而不會被阻塞。
- 接下來通過xhr.onreadystatechange方法設置一個回調函數(shù),用于監(jiān)聽XMLHttpRequest對象的狀態(tài)變化。當狀態(tài)發(fā)生變化時,該回調函數(shù)會被調用。
- 在回調函數(shù)中,首先檢查了XMLHttpRequest對象的狀態(tài)和HTTP狀態(tài)碼是否符合預期,即if(xhr.readyState === 4 && xhr.status === 200)。如果滿足條件,表示請求已經完成且成功返回,可以處理服務器返回的數(shù)據。
- 解析服務器返回的響應體,將其轉換為JSON格式:const result = JSON.parse(xhr.responseText).data。這里假設服務器返回的是JSON格式的數(shù)據,通過JSON.parse方法將其解析為JavaScript對象。
- 遍歷解析后的結果,動態(tài)創(chuàng)建li元素,并將歌曲名稱作為li元素的文本內容。這部分代碼通過for...in循環(huán)遍歷result對象的屬性,并為每個歌曲創(chuàng)建一個li元素,然后將其添加到無序列表中。
- 最后,調用xhr.send()方法發(fā)送HTTP請求。這會觸發(fā)之前設置的onreadystatechange回調函數(shù),從而實現(xiàn)異步請求的處理和數(shù)據更新。
當用戶點擊按鈕時,頁面會執(zhí)行JavaScript代碼,通過Ajax技術向指定URL發(fā)送GET請求,獲取服務器返回的數(shù)據,實現(xiàn)在頁面上動態(tài)顯示這些數(shù)據的功能。
使用 jQuery 的 $.ajax() 方法發(fā)送 AJAX 請求
這段代碼是一個使用 jQuery 的 $.ajax() 方法發(fā)送 AJAX 請求的示例:
<button id = "btn">獲取新歌</button> <ul id='ul'> </ul> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script> let btn = document.getElementById('btn') btn.addEventListener('click',() =>{ $.ajax({ url:'http://192.168.31.26:3000/top/song?type=7', method:'GET', dataType:'JSON', success: (res) =>{ console.log(res); } }) }) </script>
- 首先我們引入了 jQuery 庫文件,這里使用了公共 CDN 服務提供的鏈接。
- 之后我們在script標簽里定義了一個 btn 變量,用來獲取一個 ID 名稱為 btn 的 HTML 元素。
- 然后給 btn 元素添加了一個點擊事件監(jiān)聽器,當按鈕被點擊時會執(zhí)行回調函數(shù)。
- 在回調函數(shù)中,使用了 jQuery 提供的 .ajax()方法,在.ajax() 方法,在 .ajax()方法,在.ajax() 方法中,首先指定了請求 URL,即 http://192.168.31.26:3000/top/song?type=7 ,這里使用了 GET 方法。
- 然后指定了 dataType 為 JSON,表示期望從服務器返回的數(shù)據類型為 JSON 格式。
- 在請求成功后,會執(zhí)行 success 回調函數(shù),該函數(shù)會接收一個參數(shù) res,表示從服務器返回的響應結果。在這個示例中,使用了 console.log() 方法將 res 輸出到控制臺中。
使用Fetch API進行網絡請求
Fetch API是一種現(xiàn)代的網絡請求API,用于替代傳統(tǒng)的XMLHttpRequest對象,相較于傳統(tǒng)的Ajax更加簡潔和易用。
<button id = "btn">獲取新歌</button> <ul id='ul'> </ul> <script> let btn = document.getElementById('btn') btn.addEventListener('click',() =>{ fetch('http://192.168.31.26:3000/top/song?type=7') .then((data) => { return data.json() }) .then((res) =>{ console.log(res); }) }) </script>
實現(xiàn)過程如下:
- 首先,通過let btn = document.getElementById('btn')獲取id為"btn"的按鈕元素。
- 然后,通過btn.addEventListener('click',() => { ... })給按鈕添加了一個點擊事件的監(jiān)聽器。也就是說,當按鈕被點擊時,會執(zhí)行后面的箭頭函數(shù)中的代碼。
- 在點擊事件的處理函數(shù)中,使用Fetch API發(fā)送了一個GET請求到指定URL,即fetch('http://192.168.31.26:3000/top/song?type=7')。
- Fetch函數(shù)返回一個Promise對象,可以通過.then()方法處理請求成功后的響應。在這段代碼中,使用第一個.then()方法對返回的Response對象進行處理。
- 在第一個.then()方法中,使用箭頭函數(shù)(data) => { return data.json() }對響應的數(shù)據進行處理。通過調用data.json()方法,將Response對象的響應體解析為JSON格式,返回一個新的Promise對象。
- 接下來,使用第二個.then()方法處理解析后的JSON數(shù)據。在這段代碼中,使用箭頭函數(shù)(res) => { console.log(res); }來打印解析后的數(shù)據到控制臺。
這三種方法可以根據自己實際需要去選擇。
以上就是使用JavaScript實現(xiàn)頁面局部更新的方法總結的詳細內容,更多關于JavaScript頁面局部更新的資料請關注腳本之家其它相關文章!
相關文章
event.X和event.clientX的區(qū)別分析
解釋一下event.X和event.clientX有什么區(qū)別?event.clientX返回事件發(fā)生時,mouse相對于客戶窗口的X坐標 event.X也一樣但是如果設置事件對象的定位屬性值為relative2011-10-10詳解XMLHttpRequest(二)響應屬性、二進制數(shù)據、監(jiān)測上傳下載進度
這篇文章主要為大家詳細介紹了XMLHttpRequest響應屬性、二進制數(shù)據、監(jiān)測上傳下載進度,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09JavaScript中執(zhí)行上下文和執(zhí)行棧
這篇文章主要介紹了JavaScript中執(zhí)行上下文和執(zhí)行棧,執(zhí)行上下文是評估和執(zhí)行JavaScript代碼的環(huán)境的抽象概念,更多相關介紹,感興趣的朋友可以參考一下2022-09-09