简易使用原生Ajax ①

117 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

简易使用原生Ajax

1. 什么是XMLHttpRequest

XMLHttpRequest(简称XHR)是浏览器提供的JavaScript对象,通过它,可以请求服务器上的数据资源。

2. 使用xhr发起GET请求

① 创建xhr对象
② 调用xhr.open()函数
③ 调用xhr.send()函数
④ 监听xhr.onreadystatechange事件

使用xhr发起带参数的GET请求:
使用xhr对象发起带参数的GET请求时,只需要在调用xhr.open期间,为URL地址指定参数即可
这种在URL地址后面拼接的参数,叫做 查询字符串(?后面的)
比如: xhr.open('GET','www.guguuuu.abc:8080/api/getmone…');
多个参数可以用 & 进行连接

3. 完整流程

1.创建xhr对象

        var xhr = new XMLHttpRequest();

2.调用open函数,指定请求方式 与 URL地址

        xhr.open('GET', 'http://www.guguuuu.abc:8080/api/getmoney');
        // xhr.open('GET','http://www.guguuuu.abc:8080/api/getmoney?id=1'); 带参数的get请求

3.调用send函数,发起Ajax请求

        xhr.send();

4.监听onreadystatechange事件

        xhr.onreadystatechange = function () {
                //4.1 监听 xhr对象 的请求状态 readyState  与 服务器响应的状态 status
                if (xhr.readyState === 4 && xhr.status === 200) {
                    //上面这一行永远是固定写法,而且status是http请求状态的一部分

                    //4.2 打印服务器响应回来的数据
                    console.log(xhr.responseText);
                    console.log(xhr.response);
                }
            }

4. 了解xhr对象的readyState属性

XMLHttpRequest对象的readyState属性,用来表示当前Ajax请求所处的状态。每个Ajax请求必然处于以下状态中的一个

状态描述
0UNSENTXMLHttpRequest对象已被创建,但尚未调用open方法
1OPENEDopen()方法已被调用
2HEADERS_RECEIVEDsend()方法已被调用,响应头也已经被接收
3LOADING数据接收中,此时response属性中已经包含部分数据
4DONEAjax请求完成,这意味着数据传送已经彻底 完成 或 失败

5. 什么是查询字符串

定义: 查询字符串(URL参数)是指在URL的末尾加上用于向服务器发送信息的字符串(变量)

格式: 将英文的?放在URL的末尾,然后再加上 参数=值,想加上多个参数的话,使用&符号进行分隔。 以这个形式,可以将想要发送给服务器的数据添加到URL中。

eg:
不带参数的URL地址www.guguuuu.abc:8080/api/getmone…
带一个参数的URL地址www.guguuuu.abc:8080/api/getmone…
带两个参数的URL地址www.guguuuu.abc:8080/api/getmone…

6. URL编码与解码

什么是URL编码
URL地址中,只允许出现英文相关的字母、标点符号、数字,因此,在URL地址中不允许出现中文字符
如果URL中需要包含中文这样的字符,则必须对中文字符进行编码(转义)。

URL编码的原则: 使用安全的字符(没有特殊用途或者特殊意义的可打印的字符)去表示那些不安全的字符(中文韩文日文这些非英文的字符)
URL编码原则的通俗理解: 使用英文字符去表示非英文的字符。

eg:
www.guguuuu.abc:8080/api/getmone…
经过URL编码之后,URL地址变成了如下格式:
www.guguuuu.abc:8080/api/getmone…

👉3组百分号表示一个中文👈

7. 如何对URL进行编码与解码

浏览器提供了URL编码与解码的API,分别是:

encodeURI() 用来对URL地址进行编码的函数
decodeURI() 用来对URL地址进行解码的函数

        var str = '无敌暴龙战神';
        var str2 = encodeURI(str);
        var str3 = decodeURI(str2);
        console.log(str2);//%E6%97%A0%E6%95%8C%E6%9A%B4%E9%BE%99%E6%88%98%E7%A5%9E
        console.log(str3);//无敌暴龙战神

URL编码注意事项
由于浏览器会自动对URL地址进行编码操作,因此,大多数情况下,程序员不需要关心URL地址的编码与解码操作

关于URL编码的知识,参考如下博客 blog.csdn.net/Lxd_0111/ar…