Ajax獲取node服務(wù)器數(shù)據(jù)的完整步驟
1.準(zhǔn)備
因為是要將服務(wù)器獲取的數(shù)據(jù)放在網(wǎng)頁中 所以說對頁面的渲染是必要的 這里我準(zhǔn)備的是 art-template模板
2.服務(wù)器的準(zhǔn)備
服務(wù)器要準(zhǔn)備好渲染到頁面的數(shù)據(jù)
3.頁面的操作
這里我做的的是一個搜索框提示功能 講解都在代碼注釋中
服務(wù)器代碼如下
// 輸入框文字提示 app.get("/searchAutoPrompt", (req, res) => { // 搜索關(guān)鍵字 const key = req.query.key; // 提示文字列表 const list = ["百度", "百度官網(wǎng)", "百度游戲", "百度網(wǎng)盤"]; // 搜索結(jié)果 filter是一個遍歷的函數(shù) includes(key)是凡是字符串含有key都返回 let result = list.filter((item) => item.includes(key)); // 將查詢結(jié)果返回給客戶端 res.send(result); });
頁面代碼:
下面的代碼我用了一個封裝好的Ajax函數(shù)
代碼如下
function ajax (options) { // 默認(rèn)值 var defaults = { type: 'get', url: '', async: true, data: {}, header: { 'Content-Type': 'application/x-www-form-urlencoded' }, success: function () {}, error: function () {} } // 使用用戶傳遞的參數(shù)替換默認(rèn)值參數(shù) Object.assign(defaults, options); // 創(chuàng)建ajax對象 var xhr = new XMLHttpRequest(); // 參數(shù)拼接變量 var params = ''; // 循環(huán)參數(shù) for (var attr in defaults.data) { // 參數(shù)拼接 params += attr + '=' + defaults.data[attr] + '&'; // 去掉參數(shù)中最后一個& params = params.substr(0, params.length-1) } // 如果請求方式為get if (defaults.type == 'get') { // 將參數(shù)拼接在url地址的后面 defaults.url += '?' + params; } // 配置ajax請求 xhr.open(defaults.type, defaults.url, defaults.async); // 如果請求方式為post if (defaults.type == 'post') { // 設(shè)置請求頭 xhr.setRequestHeader('Content-Type', defaults.header['Content-Type']); // 如果想服務(wù)器端傳遞的參數(shù)類型為json if (defaults.header['Content-Type'] == 'application/json') { // 將json對象轉(zhuǎn)換為json字符串 xhr.send(JSON.stringify(defaults.data)) }else { // 發(fā)送請求 xhr.send(params); } } else { xhr.send(); } // 請求加載完成 xhr.onload = function () { // 獲取服務(wù)器端返回數(shù)據(jù)的類型 var contentType = xhr.getResponseHeader('content-type'); // 獲取服務(wù)器端返回的響應(yīng)數(shù)據(jù) var responseText = xhr.responseText; // 如果服務(wù)器端返回的數(shù)據(jù)是json數(shù)據(jù)類型 if (contentType.includes('application/json')) { // 將json字符串轉(zhuǎn)換為json對象 responseText = JSON.parse(responseText); } // 如果請求成功 if (xhr.status == 200) { // 調(diào)用成功回調(diào)函數(shù), 并且將服務(wù)器端返回的結(jié)果傳遞給成功回調(diào)函數(shù) defaults.success(responseText, xhr); } else { // 調(diào)用失敗回調(diào)函數(shù)并且將xhr對象傳遞給回調(diào)函數(shù) defaults.error(responseText, xhr); } } // 當(dāng)網(wǎng)絡(luò)中斷時 xhr.onerror = function () { // 調(diào)用失敗回調(diào)函數(shù)并且將xhr對象傳遞給回調(diào)函數(shù) defaults.error(xhr); } } <script src="/js/ajax.js"></script> <script src="/js/template-web.js"></script> <script type="text/html" id="tpl"> {{each result}} <li class="list-group-item">{{$value}}</li> {{/each}} </script> <script> // 獲取搜索框 var searchInp = document.getElementById('search'); // 獲取提示文字的存放容器 var listBox = document.getElementById('list-box'); //這里用定時器是為了優(yōu)化 定時向服務(wù)器發(fā)送請求 優(yōu)化了對服務(wù)器的壓力 // 存儲定時器的變量 var timer = null; // 當(dāng)用戶在文本框中輸入的時候觸發(fā) searchInp.oninput = function () { // 清除上一次開啟的定時器 clearTimeout(timer); // 獲取用戶輸入的內(nèi)容 var key = this.value; // 如果用戶沒有在搜索框中輸入內(nèi)容 if (key.trim().length == 0) { // 將提示下拉框隱藏掉 listBox.style.display = 'none'; // 阻止程序向下執(zhí)行 return; } // 開啟定時器 讓請求延遲發(fā)送 timer = setTimeout(function () { // 向服務(wù)器端發(fā)送請求 // 向服務(wù)器端索取和用戶輸入關(guān)鍵字相關(guān)的內(nèi)容 ajax({ type: 'get', url: 'http://localhost:3000/searchAutoPrompt', data: { key: key }, success: function (result) { // 使用模板引擎拼接字符串 var html = template('tpl', {result: result}); // 將拼接好的字符串顯示在頁面中 listBox.innerHTML = html; // 顯示ul容器 listBox.style.display = 'block'; } }) }, 800) } </script>
總結(jié)
到此這篇關(guān)于Ajax獲取node服務(wù)器數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Ajax獲取node服務(wù)器數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Node+Express搭建HTTPS服務(wù)的實現(xiàn)
最近開發(fā)需要搭建一個https的服務(wù),正好最近在用nodejs和express,本文章主要介紹了Node+Express搭建HTTPS服務(wù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12WebSocket實現(xiàn)簡單客服聊天系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了WebSocket實現(xiàn)簡單客服聊天系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05通過Nodejs搭建網(wǎng)站簡單實現(xiàn)注冊登錄流程
這篇文章主要介紹了通過Nodejs搭建網(wǎng)站簡單實現(xiàn)注冊登錄流程,Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。 Node.js 使用了一個事件驅(qū)動、非阻塞式 I/O 的模型,使其輕量又高效。,需要的朋友可以參考下2019-06-06使用Node.js實現(xiàn)Clean?Architecture方法示例詳解
這篇文章主要為大家介紹了使用Node.js實現(xiàn)Clean?Architecture方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02