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 相关文章推荐
JQ获取动态加载的图片大小的正确方法分享
Nov 08 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
Nov 20 Javascript
Javascript对象属性方法汇总
Nov 21 Javascript
利用a标签自动解析URL分析网址实例
Oct 20 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
May 26 Javascript
vue.js数据绑定操作详解
Apr 23 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
Sep 26 Javascript
Bootstrap实现模态框效果
Sep 30 Javascript
JS数组方法reverse()用法实例分析
Jan 18 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
让你的网站首页自动选择语言转跳
2006/12/06 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
详解node中创建服务进程
2017/05/09 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
Python 列表(List)操作方法详解
2014/03/11 Python
Python实现的检测网站挂马程序
2014/11/30 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
python 实现aes256加密
2020/11/27 Python
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
2014年自我评价
2014/01/04 职场文书
给领导的致歉信范文
2014/01/13 职场文书
公司请假条格式
2014/04/11 职场文书
公司租房协议书
2014/10/14 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS