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无法执行的解决办法
Feb 25 Javascript
LazyLoad 延迟加载(按需加载)
May 31 Javascript
js如何判断不同系统的浏览器类型
Oct 28 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
JavaScript中的分号插入机制详细介绍
Feb 11 Javascript
第一篇初识bootstrap
Jun 21 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
JS判断iframe是否加载完成的方法
Aug 03 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 Javascript
Angular 封装并发布组件的方法示例
Apr 19 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
Jun 18 Javascript
原生js实现表格翻页和跳转
Sep 29 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具体实现代码
2010/10/12 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
介绍一下常见的木马种类
2014/11/15 面试题
教师自我评价范文
2013/12/16 职场文书
会计出纳岗位职责
2013/12/25 职场文书
关于迟到的检讨书
2014/01/26 职场文书
交通事故私了协议书
2014/04/16 职场文书
妈妈活动方案
2014/08/15 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
三年级学生评语大全
2014/12/26 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
用Python实现Newton插值法
2021/04/17 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python