手把手教你手撕ajax

使用 Ajax,无刷新更新页面,并且实现异步提交,提升了用户体验。.

1.原生ajax

1.1 ajax是什么?

Ajax的核心是JavaScript对象XmlHttpRequest,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。

1.2 ajax作用是什么?

​ (1)通过异步模式,提升了用户体验。
​ (2)Ajax可以实现局部刷新就是能在不更新整个页面的前提下维护数据。
​ 这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息

1.3 ajax创建请求步骤

​ 1. 创建一个对象
​ 2. 设置请求参数 (post请求还需要设置请求头)
​ 3. 发送请求
​ 4. 监听请求成功后的状态变化

1.4 ajax中 get和post请求的区别

  1. 使用Get请求时,参数在URL中显示,而使用post方式,则不会显示出来

    get请求

    在这里插入图片描述

    post请求

在这里插入图片描述

  1. 使用get请求发送数据量小,因为浏览器url有长度限制,而post请求发送数据量大。
  2. GET请求能够被cache,POST不进行缓存。GET请求能够被保存在浏览器的浏览历史里面(密码等重要数据GET提交,查看历史记录就可以直接看到这些私密数据)。
  3. GET产生一个TCP数据包;POST产生两个TCP数据包。
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

2.封装ajax

手撕ajax代码

 function AJAX(type, url, data, success, failed) {
            // 创建 xhr对象
            let xhr = null
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest()
            } else { // 兼容ie
                xhr = new ActiveXObject('Microsoft.XMLHTTP')
            }
            type = type.toUpperCase()
            let random = Math.random() // 用于清除缓存
            if (typeof data === 'object') {
                // 拼接字符串
                let str = ''
                for (let key in data) {
                    str += key + '=' + data[key] + '&'
                }
                data = str.replace(/&$/, '')
            }
            if (type === "GET") {
                if (data) {
                    xhr.open(type, url + '?' + data)
                } else {
                    xhr.open(type, url + '?t=' + random)
                }
                xhr.send()
            } else if (type === 'POST') {
                xhr.open(type, url)
                xhr.setRequestHeader('Content-type', 'application/x-www-form-encoded')
                xhr.send(data)
            }
            // 处理返回的数据
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        success(xhr.responseText)
                    } else {
                        if (failed) {
                            failed(xhr.status)
                        }
                    }
                }
            }
        }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值