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页面不刷新时全选择,全删除(GridView)
Apr 14 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
使用简洁的jQuery方法实现隔行换色功能
Jan 02 Javascript
javascript动态生成树形菜单的方法
Nov 14 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
微信小程序 蓝牙的实现实例代码
Jun 27 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
Jun 17 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
Jan 05 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
判断“命令按钮”是否被鼠标单击详解
Jul 31 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
关于jQuery中的end()使用方法
2011/07/10 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
python读取Android permission文件
2013/11/01 Python
python发送arp欺骗攻击代码分析
2014/01/16 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Python selenium自动化测试模型图解
2020/04/15 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
车间操作工岗位职责
2013/12/19 职场文书
工程负责人任命书
2014/06/06 职场文书
个人安全生产责任书
2014/07/28 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
学生个人评语大全
2015/01/04 职场文书
2015年科室工作总结
2015/04/10 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
社区干部培训心得体会
2016/01/06 职场文书