利用promise及参数解构封装ajax请求

18 篇文章 0 订阅
18 篇文章 2 订阅

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) 创建一个后端项目

在这里插入图片描述

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.注:

为避免跨域,可将前端代码和后端同时放在一个项目内,使用同一地址,再发送请求调取接口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用 Promise封装 AJAX 请求。下面是一个示例: ```javascript function request(url, method, data) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open(method, url, true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 400) { resolve(xhr.response); } else { reject(xhr.statusText); } }; xhr.onerror = function() { reject(xhr.statusText); }; xhr.send(JSON.stringify(data)); }); } ``` 使用示例: ```javascript request('https://api.example.com/data', 'POST', { foo: 'bar' }) .then(function(response) { console.log('请求成功', response); }) .catch(function(error) { console.error('请求失败', error); }); ``` 在封装的 `request` 函数中,我们创建了一个新的 Promise 对象,并在 AJAX 请求的 `onload` 和 `onerror` 事件处理程序中处理成功和失败的情况。如果请求成功,我们调用 `resolve` 方法并传递响应数据,如果请求失败,我们调用 `reject` 方法并传递错误状态信息。 在使用时,我们可以通过链式调用 `.then()` 和 `.catch()` 方法来处理异步请求的结果。`.then()` 方法接收一个回调函数,当请求成功时会调用该函数,并传递响应数据。`.catch()` 方法接收一个回调函数,当请求失败时会调用该函数,并传递错误信息。 这样,我们就可以使用 Promise封装 AJAX 请求,并通过链式调用来处理异步请求的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值