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 相关文章推荐
ext实现完整的登录代码
Aug 08 Javascript
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
JavaScript中连接操作Oracle数据库实例
Apr 02 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
BootStrap实现树形目录组件代码详解
Jun 21 Javascript
js select实现省市区联动选择
Apr 17 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
Jul 10 jQuery
Vue官方文档梳理之全局配置
Nov 22 Javascript
微信小程序:数据存储、传值、取值详解
May 07 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 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判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
python如何实现int函数的方法示例
2018/02/19 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python中的Cookie模块如何使用
2020/06/04 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
什么是设计模式
2012/06/17 面试题
四议两公开实施方案
2014/03/28 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
党内外群众意见范文
2015/06/02 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers