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 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
javascript中最常用的继承模式 组合继承
Aug 12 Javascript
javascript模拟select,jselect的方法实现
Nov 08 Javascript
js multiple全选与取消全选实现代码
Dec 04 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 Javascript
详解Vue.js在页面加载时执行某个方法
Nov 20 Javascript
vue如何使用外部特殊字体的操作
Jul 30 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 Javascript
vue实现Toast组件轻提示
Apr 10 Vue.js
微信小程序获取当前时间及星期几的实例代码
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/06/25 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
简单解析Django框架中的表单验证
2015/07/17 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
全面分析Python的优点和缺点
2018/02/07 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
Python实现全排列的打印
2018/08/18 Python
python多线程下信号处理程序示例
2019/05/31 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
灵泰克Java笔试题
2016/01/09 面试题
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
企业安全标语
2014/06/07 职场文书
新闻发布会策划方案
2014/06/12 职场文书
工程造价专业求职信
2014/07/17 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
工作失误检讨书
2015/01/26 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
导游词之麻姑仙境
2019/11/18 职场文书