利用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 监听textarea中按键事件
Oct 08 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
JS实现的自定义右键菜单实例二则
Sep 01 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
解决vue项目使用font-awesome,build后路径的问题
Sep 01 Javascript
微信小程序实现自动定位功能
Oct 31 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
Nov 09 Javascript
vue项目在webpack2实现移动端字体自适配功能
Jun 02 Javascript
浅谈JavaScript 声明提升
Sep 14 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
解析php取整的几种方式
2013/06/25 PHP
微信API接口大全
2015/04/15 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
python列表操作使用示例分享
2014/02/21 Python
python创建临时文件夹的方法
2015/07/06 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
python使用super()出现错误解决办法
2017/08/14 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
党员批评与自我批评
2014/02/12 职场文书
销售个人求职信范文
2014/04/28 职场文书
项目建议书怎么写
2014/05/15 职场文书
师德师风承诺书
2014/05/23 职场文书
新年寄语2016
2015/08/17 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis