基于js方法XMLHttpRequest封装方法

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函数。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
XMLHttpRequest(XHR)是一种在客户端和服务器之间发送HTTP请求的技术。在这些引用中,我们看到了几个使用XMLHttpRequest的示例。 在第一个示例中,我们创建了一个XMLHttpRequest对象,并使用`open`方法设置请求的方式(GET)和地址以及参数。然后,我们使用`send`方法发送请求,并使用`addEventListener`方法监听`load`事件,以便在响应成功后打印出响应结果。 在第二个示例中,我们同样创建了一个XMLHttpRequest对象,并使用`open`方法设置请求的方式(GET)和URL地址。然后,我们使用`send`方法发送请求,并使用`addEventListener`方法监听`load`事件,以便在响应成功后打印出响应结果。这个示例展示了如何发起带参数的GET请求。 在第三个示例中,我们创建了一个XMLHttpRequest对象,并使用`open`方法设置请求的方式(POST)和URL地址。然后,我们创建了一个URLSearchParams对象,将数据转换成`参数=值`的格式,并使用`setRequestHeader`方法设置对应的`content-type`为`application/x-www-form-urlencoded`。最后,我们使用`send`方法发送请求,并使用`addEventListener`方法监听`load`事件,以便在响应成功后打印出响应结果。这个示例展示了如何发起带请求体的POST请求。 综上所述,这些示例展示了如何使用XMLHttpRequest对象进行封装,包括发起GET请求和POST请求,以及如何处理请求参数和响应结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [XMLHttpRequest发送网络请求的基本使用,和封装自己的ajax](https://blog.csdn.net/weixin_53312997/article/details/125547811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值