利用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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
SOSO地图JS画出标注和中心点以html形式运行
Aug 09 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
js控制网页背景音乐播放与停止的方法
Feb 06 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
vue-router实现tab标签页(单页面)详解
Oct 17 Javascript
Vue2.0用户权限控制解决方案的示例
Feb 10 Javascript
vue实现文件上传功能
Aug 13 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 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读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
兼容ie和firefox js关闭代码
2008/12/11 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
windows系统下Python环境搭建教程
2017/03/28 Python
python分布式环境下的限流器的示例
2017/10/26 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
Python多进程编程常用方法解析
2020/03/26 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
前台文员岗位职责及工作流程
2013/11/19 职场文书
金融专业毕业生推荐信
2013/11/26 职场文书
服装设计专业自荐信
2014/06/17 职场文书
树转促学习心得体会
2014/09/10 职场文书
2014年教研工作总结
2014/12/06 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书