利用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 相关文章推荐
js计数器代码
Nov 04 Javascript
Array.prototype.slice 使用扩展
Jun 09 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
Jan 24 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
Apr 17 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
js实现右键自定义菜单
Dec 03 Javascript
3分钟掌握常用的JS操作JSON方法总结
Apr 25 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
element-ui表格数据转换的示例代码
Aug 24 Javascript
ES6 对象的新功能与解构赋值介绍
Feb 05 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 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正确配置mysql(apache环境)
2011/08/28 PHP
PHP Cookie学习笔记
2016/08/23 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
一个javascript图片阅览组件
2010/11/09 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
js实现华丽的九九乘法表效果
2017/03/29 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
详解python的argpare和click模块小结
2019/03/31 Python
Python数据库小程序源代码
2019/09/15 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
django实现日志按日期分割
2020/05/21 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python