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 相关文章推荐
javascript抖动元素的小例子
Oct 28 Javascript
jquery如何通过name名称获取当前name的value值
Dec 20 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
Bootstrap fileinput组件封装及使用详解
Mar 10 Javascript
JS实现商品筛选功能
Aug 19 Javascript
VUE2实现事件驱动弹窗示例
Oct 21 Javascript
原生JS实现多个小球碰撞反弹效果示例
Jan 31 Javascript
微信小程序实现弹出层效果
May 26 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
Aug 23 Javascript
layui操作列按钮个数和文字颜色的判断实例
Sep 11 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
Oct 25 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中include()与require()的区别说明
2010/03/10 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
JS查找孩子节点简单示例
2019/07/25 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
Python的设计模式编程入门指南
2015/04/02 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
大学军训通讯稿
2014/01/13 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
派出所所长先进事迹
2014/05/19 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书