基于js方法XMLHttpRequest封装方法

文章介绍了XMLHttpRequest对象的基础使用方法,包括创建实例、发送请求以及处理响应。此外,还详细讨论了如何封装一个考虑浏览器兼容性的AJAX请求函数,涉及GET和POST请求的实现,以及参数处理。最后展示了封装后的函数使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XMLHttpRequest()对象介绍

XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest 在 AJAX 编程中被大量使用。
官方文档 https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

  • 基本使用方法

首先创建XMLHttpRequest实例对象
调用open和send方法
监听实例对象响应获取服务器响应数据

let xhr = new XMLHttpRequest()
let url = 'api/shoplist'
xhr.open = ("GET", url, true)
xhr.send(null)
xhr.onreadystatechange = function (){
    if(xhr.readyState === 4 && xhr.status === 200){
        return xhr.responseText
    }
}

XMLHttpRequest()封装流程

很多时候我们只需要开发一个简单地页面,不需要引入任何js库,这时接口请求用到 XMLHttpRequest 对象必不可少,那么封装一个好用的请求方法是理所应当的了。以下是我们比较习惯的请求方式,我们一起来封装一个吧!

  • 解决浏览器兼容性问题

由于浏览器不同,一些老版本的浏览器可能存在兼容性问题所以我们需要解决一下兼容性问题

function newXhr() {
    let xhr
    if (XMLHttpRequest) {
        xhr = new XMLHttpRequest()
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP")
    }
    return xhr
}
  • 接收参数

url地址,method请求方式,type,返回结果格式,data,请求参数

function ajaxRequest(ajxaData){
    let {url, method, type, data} = ajxaData
    // 区分大小写,一律转成大写
    method = method.toUpperCase()
    // 解决浏览器兼容性
    let xhr = newXhr()
    return new Promise((resolve, reject) => {
        
    })
}
  • 处理请求参数或数据格式

由于不同请求方式,请求参数或数据挂载方式不同,所以需要数据处理

// 解析query数据
function queryParse(query){
    let queryText = "";
    for(let key in query){
        queryText += `${key}=${query[key]}&`;
		}
    return queryText.slice(0,-1);
}

// 解析params数据
function paramsParse(params){
    let paramsText = ""
    for (let key in params) {
        paramsText += `${key}=${params[key]}&`
    }
    return paramsText.length > 0 ? "?" + paramsText : paramsText
}
  • 根据不同请求方式实现代码不同

以下是实例的get和post请求
需要判断请求方式实现不同请求方法

    return new Promise((resolve, reject) => {
        // GET请求
        if (method === "GET") {
            url = url + paramsParse(data)
            xhr.open(method, url, true)
            xhr.send(null)
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    let data = JSON.parse(xhr.responseText)
                    resolve(data)
                } else {
                    reject({
                        status: xhr.status,
                        msg: '请求出错'
                    })
                }
            }
            return
        }
        // POST请求
        if(method === "POST"){
            xhr.open(method, url, true)
            xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded")
            xhr.send(queryParse(data))
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    let data = JSON.parse(xhr.responseText)
                    resolve(data)
                } else {
                    reject({
                        status: xhr.status,
                        msg: '请求出错'
                    })
                }
            }
            return
        }
    })
  • 使用方法

使用方法类似于jquery中ajxa使用方法

ajaxRequest({
    url: "/api/shoplist",
    method: "get",
    data:{
        page: 1
    }
}).then(res => {
    console.log(res);
})

封装时需要注意method请求方式大小写,请求参数或数据处理,注意区分请求方式,请求数据分别处理,这样就完成了一个属于自己的axjx函数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值