1. 程式人生 > 程式設計 >Ajax獲取node伺服器資料的完整步驟

Ajax獲取node伺服器資料的完整步驟

1.準備

因為是要將伺服器獲取的資料放在網頁中 所以說對頁面的渲染是必要的 這裡我準備的是 art-template模板

2.伺服器的準備

伺服器要準備好渲染到頁面的資料

3.頁面的操作

這裡我做的的是一個搜尋框提示功能 講解都在程式碼註釋中

伺服器程式碼如下

// 輸入框文字提示
app.get("/searchAutoPrompt",(req,res) => {
 // 搜尋關鍵字
 const key = req.query.key;
 // 提示文字列表
 const list = ["百度","百度官網","百度遊戲","百度網盤"];
 // 搜尋結果 filter是一個遍歷的函式 includes(key)是凡是字串含有key都返回
 let result = list.filter((item) => item.includes(key));
 // 將查詢結果返回給客戶端
 res.send(result);
});

頁面程式碼:

下面的程式碼我用了一個封裝好的Ajax函式

程式碼如下

function ajax (options) {
 // 預設值
 var defaults = {
  type: 'get',url: '',async: true,data: {},header: {
   'Content-Type': 'application/x-www-form-urlencoded'
  },success: function () {},error: function () {}
 }
 // 使用使用者傳遞的引數替換預設值引數
 Object.assign(defaults,options);
 // 建立ajax物件
 var xhr = new XMLHttpRequest();
 // 引數拼接變數
 var params = '';
 // 迴圈引數
 for (var attr in defaults.data) {
  // 引數拼接
  params += attr + '=' + defaults.data[attr] + '&';
  // 去掉引數中最後一個&
  params = params.substr(0,params.length-1)
 }
 // 如果請求方式為get
 if (defaults.type == 'get') {
  // 將引數拼接在url地址的後面
  defaults.url += '?' + params;
 }

 // 配置ajax請求
 xhr.open(defaults.type,defaults.url,defaults.async);
 // 如果請求方式為post
 if (defaults.type == 'post') {
  // 設定請求頭
  xhr.setRequestHeader('Content-Type',defaults.header['Content-Type']);
  // 如果想伺服器端傳遞的引數型別為json
  if (defaults.header['Content-Type'] == 'application/json') {
   // 將json物件轉換為json字串
   xhr.send(JSON.stringify(defaults.data))
  }else {
   // 傳送請求
   xhr.send(params);
  }
 } else {
  xhr.send();
 }
 // 請求載入完成
 xhr.onload = function () {
  // 獲取伺服器端返回資料的型別
  var contentType = xhr.getResponseHeader('content-type');
  // 獲取伺服器端返回的響應資料
  var responseText = xhr.responseText;
  // 如果伺服器端返回的資料是json資料型別
  if (contentType.includes('application/json')) {
   // 將json字串轉換為json物件
   responseText = JSON.parse(responseText);
  }
  // 如果請求成功
  if (xhr.status == 200) {
   // 呼叫成功回撥函式,並且將伺服器端返回的結果傳遞給成功回撥函式
   defaults.success(responseText,xhr);
  } else {
   // 呼叫失敗回撥函式並且將xhr物件傳遞給回撥函式
   defaults.error(responseText,xhr);
  } 
 }
 // 當網路中斷時
 xhr.onerror = function () {
  // 呼叫失敗回撥函式並且將xhr物件傳遞給回撥函式
  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');
 //這裡用定時器是為了優化 定時向伺服器傳送請求 優化了對伺服器的壓力
 // 儲存定時器的變數
 var timer = null;
 // 當用戶在文字框中輸入的時候觸發
 searchInp.oninput = function () {
  // 清除上一次開啟的定時器
  clearTimeout(timer);
  // 獲取使用者輸入的內容
  var key = this.value;
  // 如果使用者沒有在搜尋框中輸入內容
  if (key.trim().length == 0) {
   // 將提示下拉框隱藏掉
   listBox.style.display = 'none';
   // 阻止程式向下執行
   return;
  }

  // 開啟定時器 讓請求延遲傳送
  timer = setTimeout(function () {
   // 向伺服器端傳送請求
   // 向伺服器端索取和使用者輸入關鍵字相關的內容
   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>

總結

到此這篇關於Ajax獲取node伺服器資料的文章就介紹到這了,更多相關Ajax獲取node伺服器資料內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!