Ajax获取node服务器数据的完整步骤


Posted in Javascript onSeptember 20, 2020

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服务器数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jqGrid增加时--判断开始日期与结束日期(实例解析)
Nov 08 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
jquery实现的蓝色二级导航条效果代码
Aug 24 Javascript
AngularJS Module方法详解
Dec 08 Javascript
值得分享的轻量级Bootstrap Table表格插件
May 30 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
JavaScript使用类似break机制中断forEach循环的方法
Nov 13 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
Nov 04 Javascript
JS前端基于canvas给图片添加水印
Nov 11 Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 20 #Javascript
vue操作dom元素的3种方法示例
Sep 20 #Javascript
npm ci命令的基本使用方法
Sep 20 #Javascript
js面试题之异步问题的深入理解
Sep 20 #Javascript
js实现简单的点名器随机色实例代码
Sep 20 #Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 #Javascript
Vue+element+cookie记住密码功能的简单实现方法
Sep 20 #Javascript
You might like
国外十大最流行的PHP框架排名
2013/07/04 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
token 机制和实现方式
2020/12/15 Javascript
Python使用sorted排序的方法小结
2017/07/28 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
详解Python学习之安装pandas
2019/04/16 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
python 异步async库的使用说明
2020/05/04 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
生产内勤岗位职责
2013/12/07 职场文书
十八大闭幕感言
2014/01/22 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
经费申请报告
2015/05/15 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
python for循环赋值问题
2021/06/03 Python