利用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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
$()JS小技巧
Jul 21 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
JQuery页面的表格数据的增加与分页的实现
Dec 10 Javascript
Javascript显示和隐藏ul列表的方法
Jul 15 Javascript
Jquery技巧(必须掌握)
Mar 16 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
详解vue移动端项目代码拆分记录
Mar 15 Javascript
tweenjs缓动算法的使用实例分析
Aug 26 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
vue基于better-scroll仿京东分类列表
Jun 30 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
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
python实时监控cpu小工具
2018/06/21 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
python中dict使用方法详解
2019/07/17 Python
python实现机器人卡牌
2019/10/06 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
基本款天堂:Everlane
2017/05/13 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
护士试用期自我鉴定
2014/02/08 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
财政专业求职信范文
2014/02/19 职场文书
双方协议书
2014/04/22 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书