利用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 相关文章推荐
JQuery文本框高亮显示插件代码
Apr 02 Javascript
jQuery中jqGrid分页实现代码
Nov 04 Javascript
js中arguments的用法(实例讲解)
Nov 30 Javascript
原生javascript获取元素样式
Dec 31 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
Jul 20 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
Angular.JS通过指令操作DOM的方法
May 10 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
vue实现随机验证码功能(完整代码)
Dec 10 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 float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
python 瀑布线指标编写实例
2020/06/03 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
新学期红领巾广播稿
2014/01/14 职场文书
交通事故检查书范文
2014/01/30 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
毕业设计致谢词
2015/05/14 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python