利用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 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
jQuery/CSS3图片特效插件整理推荐
Dec 07 Javascript
javascript中Date对象的getDay方法使用指南
Dec 22 Javascript
第五篇Bootstrap 排版
Jun 21 Javascript
AngularJS实现星星等级评分功能
Sep 24 Javascript
用jQuery实现优酷首页轮播图
Jan 09 Javascript
Vue项目查看当前使用的elementUI版本的方法
Sep 27 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 Javascript
17道题让你彻底理解JS中的类型转换
Aug 08 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
JavaScript封装单向链表的示例代码
Sep 17 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多维数组去掉重复值示例分享
2014/03/02 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
露营世界:Camping World
2017/02/02 全球购物
外包公司软件测试工程师
2014/11/01 面试题
护士思想汇报
2014/01/12 职场文书
先进个人事迹材料
2014/01/25 职场文书
高中生期末评语大全
2014/01/28 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
师德师风个人反思
2014/04/28 职场文书
初中学校对照检查材料
2014/08/19 职场文书
中学生打架检讨书
2014/10/13 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
求职信如何撰写?
2019/05/22 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
爱国之歌(8首)
2019/09/29 职场文书