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 相关文章推荐
js 模拟气泡屏保效果代码
Jul 10 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
Vue制作Todo List网页
Apr 26 Javascript
Vuejs实现带样式的单文件组件新方法
May 02 Javascript
js + css实现标签内容切换功能(实例讲解)
Oct 09 Javascript
极简主义法编写JavaScript类
Nov 02 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
Dec 13 Javascript
JavaScript剩余操作符Rest Operator详解
Jul 20 Javascript
JavaScript实现移动端弹窗后禁止滚动
May 25 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
Oct 16 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者的疑难问答(1)
2006/10/09 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
JavaScript模块详解
2017/12/18 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python 常用string函数详解
2016/05/30 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
保护环境的标语
2014/06/09 职场文书
美术学专业求职信
2014/07/23 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
党支部意见范文
2015/06/02 职场文书
仰望星空观后感
2015/06/10 职场文书
五一晚会主持词
2015/07/01 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技