利用promise及参数解构封装ajax请求的方法


Posted in Javascript onMarch 24, 2021

1.前端代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>
<body>
 <script>
 /**
  * type: get/post
  * url: http://localhost:3000 http://localhost:3000/details http://localhost:3000/users
  * data: lid=5 / uname=lili&upwd=123456
  * dataType: '' / 'json', 如果服务端返回的是json格式字符串,就通过dataType通知ajax函数自动转换为对象
  * **/
 ajax({
  type: 'get',
  url: 'http://localhost:3000',
  dataType: 'json'
 })
 // data 不写在解构时值默认为 data: undefined
 ajax({
  type: 'get',
  url: 'http://localhost:3000/details',
  data: 'lid=0',
  dataType: 'json'
 })
 ajax({
  type: 'post', 
  url: 'http://localhost:3000/users', 
  data: 'uname=lili&upwd=123456',
 }).then(function(res){
  alert(res)
 })
 // dataType 不写在解构时值默认为 dataType: undefined
 
 function ajax({type, url,data, dataType}){
  return new Promise(function(open){
  var xhr = new XMLHttpRequest()
  xhr.onreadystatechange = function(){
   if(xhr.readyState === 4 && xhr.status === 200){
   if(dataType === 'json'){
    var res = JSON.parse(xhr.responseText)
   }else{
    var res = xhr.responseText
   }
   console.log(res)
   open(res)
   }
  }
 
  if(type === 'get' && data !== undefined){
   url += `?${data}`
  }
  xhr.open(type, url, true)
  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
 
  if(type === 'get'){
   xhr.send()
  }else{
   xhr.send(data)
  }
  })
 }
 </script>
</body>
</html>

另:ajax实际代码实现如下

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>
<body>
 <script>
 var xhr = new XMLHttpRequest()
 xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
  console.log(xhr.responseText)
  }
 }
 xhr.open('get', 'http://localhost:3000', true)
 xhr.send()
 </script>
</body>
</html>

2.后端代码

1) 创建一个后端项目

利用promise及参数解构封装ajax请求的方法

2) 在routes下创建index.js,users.js,代码如下

// index.js
var express = require('express');
var router = express.Router();
 
/* GET home page. */
var products = [
 {
 lid:1,
 pname:'笔记本',
 price:3400
 },
 {
 lid:2,
 pname:'手机',
 price:5400
 },
 {
 lid:3,
 pname:'iPad',
 price:6400
 }
]
 
router.get('/', function(req, res, next) {
 res.send(products)
});
 
router.get('/details', function(req, res, next){
 var lid = req.query.lid
 res.send(products[lid])
})
 
module.exports = router;
// user.js
var express = require('express');
var router = express.Router();
 
/* GET users listing. */
router.post('/', function(req, res, next) {
 var uname = req.body.uname
 var upwd = req.body.upwd
 if(uname === 'lili' && upwd === '123456'){
 res.send('登陆成功')
 }else{
 res.send({
  code: 0,
  message: '用户名或密码错误'
 })
 }
});
 
module.exports = router;

3.注:

为避免跨域,可将前端代码和后端同时放在一个项目内,使用同一地址,再发送请求调取接口

Javascript 相关文章推荐
jQuery autocomplete插件修改
Apr 17 Javascript
ExtJs中简单的登录界面制作方法
Aug 19 Javascript
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
Mar 16 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
详解vue-router基本使用
Apr 18 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
JS实现显示当前日期的实例代码
Jul 03 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 Javascript
AJAX检测用户名是否存在的方法
Mar 24 #Javascript
js正则匹配markdown里的图片标签的实现
浅谈react路由传参的几种方式
Mar 23 #Javascript
一百多行代码实现react拖拽hooks
node中使用shell脚本的方法步骤
详解如何解决使用JSON.stringify时遇到的循环引用问题
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
You might like
自己前几天写的无限分类类
2007/02/14 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
深入理解Python中装饰器的用法
2016/06/28 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
详解supervisor使用教程
2017/11/21 Python
Java分治归并排序算法实例详解
2017/12/12 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
2014年教师节演讲稿
2014/09/03 职场文书
毕业横幅标语
2014/10/08 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
论文致谢词范文
2015/05/14 职场文书
新闻稿格式范文
2015/07/18 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
总结Python变量的相关知识
2021/06/28 Python
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers