利用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 相关文章推荐
javascript 图片上传预览-兼容标准
Jun 01 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
JavaScript中继承用法实例分析
May 16 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
jQuery实现Email邮箱地址自动补全功能代码
Nov 03 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
May 31 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
react-intl实现React国际化多语言的方法
Sep 27 Javascript
AJAX学习笔记
May 18 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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
PHP PDO函数库详解
2010/04/27 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
JS异步错误捕获的一些事小结
2019/04/26 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
python删除过期文件的方法
2015/05/29 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
python if not in 多条件判断代码
2016/09/21 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
Python安装whl文件过程图解
2020/02/18 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
Servlet的生命周期
2013/08/25 面试题
银行介绍信范文
2014/01/10 职场文书
国际金融专业自荐信
2014/07/05 职场文书
热情服务标语
2014/10/07 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
小学六年级毕业感言
2015/07/30 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android