最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ajax獲取node服務(wù)器數(shù)據(jù)的完整步驟

 更新時(shí)間:2020年09月20日 11:12:18   作者:幸福的code1  
這篇文章主要給大家介紹了關(guān)于Ajax獲取node服務(wù)器數(shù)據(jù)的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.準(zhǔn)備

因?yàn)槭且獙⒎?wù)器獲取的數(shù)據(jù)放在網(wǎng)頁中 所以說對(duì)頁面的渲染是必要的 這里我準(zhǔn)備的是 art-template模板

2.服務(wù)器的準(zhǔn)備

服務(wù)器要準(zhǔn)備好渲染到頁面的數(shù)據(jù)

3.頁面的操作

這里我做的的是一個(gè)搜索框提示功能 講解都在代碼注釋中

服務(wù)器代碼如下

// 輸入框文字提示
app.get("/searchAutoPrompt", (req, res) => {
 // 搜索關(guān)鍵字
 const key = req.query.key;
 // 提示文字列表
 const list = ["百度", "百度官網(wǎng)", "百度游戲", "百度網(wǎng)盤"];
 // 搜索結(jié)果 filter是一個(gè)遍歷的函數(shù) includes(key)是凡是字符串含有key都返回
 let result = list.filter((item) => item.includes(key));
 // 將查詢結(jié)果返回給客戶端
 res.send(result);
});

頁面代碼:

下面的代碼我用了一個(gè)封裝好的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對(duì)象
 var xhr = new XMLHttpRequest();
 // 參數(shù)拼接變量
 var params = '';
 // 循環(huán)參數(shù)
 for (var attr in defaults.data) {
  // 參數(shù)拼接
  params += attr + '=' + defaults.data[attr] + '&';
  // 去掉參數(shù)中最后一個(gè)&
  params = params.substr(0, params.length-1)
 }
 // 如果請(qǐng)求方式為get
 if (defaults.type == 'get') {
  // 將參數(shù)拼接在url地址的后面
  defaults.url += '?' + params;
 }

 // 配置ajax請(qǐng)求
 xhr.open(defaults.type, defaults.url, defaults.async);
 // 如果請(qǐng)求方式為post
 if (defaults.type == 'post') {
  // 設(shè)置請(qǐng)求頭
  xhr.setRequestHeader('Content-Type', defaults.header['Content-Type']);
  // 如果想服務(wù)器端傳遞的參數(shù)類型為json
  if (defaults.header['Content-Type'] == 'application/json') {
   // 將json對(duì)象轉(zhuǎn)換為json字符串
   xhr.send(JSON.stringify(defaults.data))
  }else {
   // 發(fā)送請(qǐng)求
   xhr.send(params);
  }
 } else {
  xhr.send();
 }
 // 請(qǐng)求加載完成
 xhr.onload = function () {
  // 獲取服務(wù)器端返回?cái)?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對(duì)象
   responseText = JSON.parse(responseText);
  }
  // 如果請(qǐng)求成功
  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對(duì)象傳遞給回調(diào)函數(shù)
   defaults.error(responseText, xhr);
  } 
 }
 // 當(dāng)網(wǎng)絡(luò)中斷時(shí)
 xhr.onerror = function () {
  // 調(diào)用失敗回調(diào)函數(shù)并且將xhr對(duì)象傳遞給回調(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');
 //這里用定時(shí)器是為了優(yōu)化 定時(shí)向服務(wù)器發(fā)送請(qǐng)求 優(yōu)化了對(duì)服務(wù)器的壓力
 // 存儲(chǔ)定時(shí)器的變量
 var timer = null;
 // 當(dāng)用戶在文本框中輸入的時(shí)候觸發(fā)
 searchInp.oninput = function () {
  // 清除上一次開啟的定時(shí)器
  clearTimeout(timer);
  // 獲取用戶輸入的內(nèi)容
  var key = this.value;
  // 如果用戶沒有在搜索框中輸入內(nèi)容
  if (key.trim().length == 0) {
   // 將提示下拉框隱藏掉
   listBox.style.display = 'none';
   // 阻止程序向下執(zhí)行
   return;
  }

  // 開啟定時(shí)器 讓請(qǐng)求延遲發(fā)送
  timer = setTimeout(function () {
   // 向服務(wù)器端發(fā)送請(qǐng)求
   // 向服務(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • NodeJs入門教程之定時(shí)器和隊(duì)列

    NodeJs入門教程之定時(shí)器和隊(duì)列

    這篇文章主要給大家介紹了關(guān)于NodeJs入門教程之定時(shí)器和隊(duì)列的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 使用NODE.JS創(chuàng)建一個(gè)WEBSERVER(服務(wù)器)的步驟

    使用NODE.JS創(chuàng)建一個(gè)WEBSERVER(服務(wù)器)的步驟

    在 node.js 中創(chuàng)建一個(gè)服務(wù)器非常簡(jiǎn)單,只需要使用 node.js 為我們提供的 http 模塊及相關(guān) API 即可創(chuàng)建一個(gè)麻雀雖小但五臟俱全的web 服務(wù)器,相比 Java/Python/Ruby 搭建web服務(wù)器的過程簡(jiǎn)單的很。本文簡(jiǎn)單的講解下實(shí)現(xiàn)步驟
    2021-06-06
  • 基于nodejs使用express創(chuàng)建web服務(wù)器的操作步驟

    基于nodejs使用express創(chuàng)建web服務(wù)器的操作步驟

    express實(shí)際上是對(duì)nodejs內(nèi)置http進(jìn)行封裝后的第三方包,其中提供了快捷創(chuàng)建web服務(wù)器以及處理請(qǐng)求路由的方法,使我們可以更加方便快捷的實(shí)現(xiàn)一個(gè)web服務(wù)器項(xiàng)目,本文件給大家詳細(xì)介紹基于nodejs使用express?創(chuàng)建web服務(wù)器的操作步驟
    2023-07-07
  • 解決await在forEach中不起作用的問題

    解決await在forEach中不起作用的問題

    這篇文章主要介紹了解決await在forEach中不起作用的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Node.js API詳解之 vm模塊用法實(shí)例分析

    Node.js API詳解之 vm模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 vm模塊用法,結(jié)合實(shí)例形式分析了Node.js API中vm模塊基本功能、函數(shù)、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • nodejs入門教程三:調(diào)用內(nèi)部和外部方法示例

    nodejs入門教程三:調(diào)用內(nèi)部和外部方法示例

    這篇文章主要介紹了nodejs入門教程之調(diào)用內(nèi)部和外部方法,結(jié)合實(shí)例形式分析了nodejs內(nèi)部與外部方法的定義與調(diào)用相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼

    NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼

    這篇文章主要介紹了NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • node.js入門教程

    node.js入門教程

    這篇文章主要介紹了node.js入門教程,講解了node.js在linux和windows下的安裝,模塊的概念,NPM的使用等等,是一篇不錯(cuò)的nodejs入門文章,需要的朋友可以參考下
    2014-06-06
  • node.js中的fs.link方法使用說明

    node.js中的fs.link方法使用說明

    這篇文章主要介紹了node.js中的fs.link方法使用說明,本文介紹了fs.link的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js中使用socket.io的方法

    node.js中使用socket.io的方法

    這篇文章主要介紹了node.js中使用socket.io的方法,需要的朋友可以參考下
    2014-12-12

最新評(píng)論

射洪县| 泗水县| 运城市| 商水县| 若尔盖县| 东阳市| 兰溪市| 哈尔滨市| 县级市| 安丘市| 松滋市| 塔河县| 墨竹工卡县| 沈阳市| 乌兰县| 延川县| 会泽县| 金门县| 山丹县| 安庆市| 新营市| 师宗县| 黎城县| 汉寿县| 利辛县| 宁蒗| 沙坪坝区| 鹤壁市| 卢龙县| 凤台县| 汉寿县| 江川县| 敦煌市| 桐城市| 东阿县| 澄迈县| 巴林右旗| 孟津县| 双流县| 盐津县| 黄大仙区|