AJAX | XMLHttpRequest的基本使用 + 数据交换格式 + 封装自己的Ajax函数 + XMLHttpRequest Level2的新特性+ jQuer实现文件上传 + axios

目录

XMLHttpRequest的基本使用

使用xhr发起GET请求

xhr对象的readyState属性

使用xhr发起带参数的GET请求

查询字符串

URL编码与解码

使用xhr发起POST请求

数据交换格式

XML 

JSON

封装自己的Ajax函数

要实现的效果

定义options参数选项

处理data参数

定义itheima函数

判断请求的类型

全部js代码

调用itheima函数

XMLHttpRequest Level2的新特性

设置HTTP请求时限

FormData对象管理表单数据

上传文件

显示文件上传进度

jQuery高级用法

jQuer实现文件上传

jQuery实现loading效果

完整代码

axios

axios发起GET请求

axios发起POST请求

直接使用axios发起请求


XMLHttpRequest的基本使用

  • XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,通过它,可以请求服务器上的数据资源
  • 之前所学的 jQuery 中的 Ajax 函数,就是基于 xhr 对象封装出来的。

使用xhr发起GET请求

步骤:

  • 创建 xhr 对象
  • 调用 xhr.open() 函数  创建请求
  • 调用 xhr.send() 函数   发起请求
  • 监听 xhr.onreadystatechange 事件    拿到服务器响应的数据
        // 1. 创建xhr 对象
        var xhr = new XMLHttpRequest();
        // 2. 调用 open 函数   指定 请求方式 与 URL地址
        xhr.open('get', 'http://www.liulongbin.top:3006/api/getbooks');
        // 3. 调用 send 函数  发起Ajax请求
        xhr.send();
        // 4. 监听 onreadystatechange 事件
        xhr.onreadystatechange = function () {
            // 监听 xhr 对象的请求状态 readyState ;与服务器响应的状态 status
            if (xhr.readyState === 4 && xhr.status === 200) { // 固定写法
                // 获取服务器响应的数据
                console.log(xhr.responseText);
            }
        }

             xhr对象的readyState属性

  • XMLHttpRequest 对象的 readyState 属性,用来表示当前 Ajax 请求所处的状态

状态

描述

0

UNSENT

XMLHttpRequest 对象已被创建,但尚未调用 open方法。

1

OPENED

open() 方法已经被调用。

2

HEADERS_RECEIVED

send() 方法已经被调用,响应头也已经被接收。

3

LOADING

数据接收中,此时 response 属性中已经包含部分数据。

4

DONE

Ajax 请求完成这意味着数据传输已经彻底完成失败

             使用xhr发起带参数的GET请求

  • 使用 xhr 对象发起带参数的 GET 请求时,只需在调用 xhr.open 期间,为 URL 地址指定参数即可
// ...省略不必要的代码
xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks?id=1')
// ...省略不必要的代码
  • 这种在 URL 地址后面拼接的参数,叫做查询字符串
        var xhr = new XMLHttpRequest();
        // 获取id为1的数据
        xhr.open('get', 'http://www.liulongbin.top:3006/api/getbooks?id=1');
        xhr.send();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
            }
        }

             查询字符串

  • 定义:查询字符串(URL 参数)是指在 URL 的末尾加上用于向服务器发送信息的字符串(变量)。
  • 格式:将英文的 ? 放在URL 的末尾,然后再加上 参数=值 ,想加上多个参数的话,使用 & 符号进行分隔。以这个形式,可以将想要发送给服务器的数据添加到 URL 中。
// 不带参数的 URL 地址
http://www.liulongbin.top:3006/api/getbooks
// 带一个参数的 URL 地址
http://www.liulongbin.top:3006/api/getbooks?id=1
// 带两个参数的 URL 地址
http://www.liulongbin.top:3006/api/getbooks?id=1&bookname=西游记

GET请求携带参数的本质

  • 无论使用 $.ajax(),还是使用 $.get(),又或者直接使用 xhr 对象发起 GET 请求
  • 当需要携带参数的时候,本质上,都是直接将参数以查询字符串的形式,追加到 URL 地址的后面,发送到服务器的。

GET请求携带参数的本质:以查询字符串的形式来提交参数

        // 要先引用jquery.js
        $.get('http://www.liulongbin.top:3006/api/getbooks', { id: 1, bookname: '西游记' }, function (res) {
            console.log(res);
        })
        $.ajax({
            method: 'get',
            url: 'http://www.liulongbin.top:3006/api/getbooks',
            data: {
                id: 2,
                author: '曹雪芹'
            },
            success: function (res) {
                console.log(res);
            }
        })

             URL编码与解码

  • URL 地址中,只允许出现英文相关的字母、标点符号、数字,因此,在 URL 地址中不允许出现中文字符。
  • 如果 URL 中需要包含中文这样的字符,则必须对中文字符进行编码(转义)
  • URL编码的原则:使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。
  • URL编码原则的通俗理解:使用英文字符去表示非英文字符。

如何对URL进行编码与解码

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

  • encodeURI()  编码的函数
  • decodeURI()  解码的函数
        var str = '刘德华';
        var str2 = encodeURI(str);
        console.log(str2);  // %E5%88%98%E5%BE%B7%E5%8D%8E
        var str3 = decodeURI('%E5%BE%B7%E5%8D%8E');
        console.log(str3);  // 德华
  • 由于浏览器会自动对 URL 地址进行编码操作,因此,大多数情况下,程序员不需要关心 URL 地址的编码与解码操作。

使用xhr发起POST请求

步骤:

  • 创建 xhr 对象
  • 调用 xhr.open() 函数
  • 设置 Content-Type 属性(固定写法)
  • 调用 xhr.send() 函数,同时指定要发送的数据
  • 监听 xhr.onreadystatechange 事件
        // 1. 创建xhr对象
        var xhr = new XMLHttpRequest();
        // 2.调用open 函数
        xhr.open('post', 'http://www.liulongbin.top:3006/api/addbook');
        // 3. 设置Content-Type 属性    固定写法
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        // 4. 调用send函数   同时将数据以查询字符串的形式,提交给服务器
        xhr.send('bookname=哈里波波&author=罗琳&publisher=England');
        // 5. 监听事件
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
            }
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值