Ajax 异步请求 数据交互

Ajax 异步请求与数据交互

1、初始 Ajax

Ajax 是什么?

  1. Asynchronous JavaScript And XML

异步的 JavaScript 和 XML

  1. Web 开发的一种技术

是一种使用 JavaScript 请求 XML 数据的技术

  1. 异步发送和请求数据

使用异步的方式提交和请求数据,不需要重新刷新当前页面

  1. 目前 JSON 数据格式已经占据市场

目前 Ajax 技术主要用于请求 JSON 数据

Ajax 请求数据图解

image
1、客户端使用 Js 通过调用一个对象 XMLHttpRequest 来请求服务器
2、服务器返回 XML/JSON 的数据格式,数据返回到 HTML Response 中

XMLHttpRequest 对象
  • XMLHttpRequest 是一个对象类型的 API

  • 在浏览器环境下使用

  • 是 BOM 中的一个对象

  • 用于客户端和服务端数据的传递和接收

  • 用于请求 XML 数据(JSON,纯文本text)

其他类似技术 / 库

  • jQuery
  • Axios
  • Superagent
  • Fetch API
  • Prototype
  • Node HTTP

安装 XAMPP

XAMPP 是一个集成的服务器组件,它包含了 PHP、Apache、Mysql 等服务。
下载地址:XAMPP DownLoad

1、安装完成后,启动 Apache、Mysql、PHP 等服务;
2、在浏览器地址栏输入 http://localhost ,如果显示欢迎页面则说明服务已经开启;
3、 http://127.0.0.1/phpmyadmin/ 进入后台管理页面;
4、进入 XAMPP 安装目录下的 htdocs 文件夹,配置文件都在这个目录下;
5、在 htdocs 目录下新建自己的项目文件,就可以在服务器环境中运行了;
6、运行 html 文时,要使用 localhost 前缀,例如:http://localhost/ajaxsandbox/ajax4.html

2、Ajax 请求的两种方式

使用 Ajax 来请求数据时,需要创建一个 XMLHttpRequest() 对象,然后使用这个对象中的一些属性和方法来请求数据。

XMLHttpRequest 对象的属性和方法

// 点击一个 button 后拿到一个纯文本信息
document.getElementById("button").addEventListener("click", loadText);
function loadText() {
   
    // 创建 XMLHttpRequest 对象
    var xhr = new XMLHttpRequest();
    console.log(xhr);
}

运行上述代码,结果如下:
img

Ajax请求的两种方式

onload 事件
onreadystatechange 事件

Ajax 请求纯文本

1、通过 onload 方法请求:

<button id="button">请求纯文本</button>
<script>
// 点击一个 button 后拿到一个纯文本信息
document.getElementById("button").addEventListener("click", loadText);
function loadText() {
   
    // 创建 XMLHttpRequest 对象
    var xhr = new XMLHttpRequest();
    // console.log(xhr);  // 打印 XMLHttpRequest 对象

    // open(type, url, async) 
    // 参数1:请求的类型 "GET" 或 "POST"
    // 参数2:请求的目标地址 
    // 参数3:是否开启异步请求 true 或 false
    xhr.open("GET","sample.txt", true);

    // 两种方式请求 onload / onreadystatechange
    xhr.onload = function () {
   
        // 以文本的形式打印返回的内容
        console.log(this.responseText);
    }
    
    // 发送请求
    xhr.send();
}

2、通过 onreadystatechange 方法请求:

<button id="button">请求纯文本</button>
<br>
<div id="text"></div>

<script>
    // 点击一个 button 后拿到一个纯文本信息
    document.getElementById("button").addEventListener("click", loadText);
    var text = document.getElementById("text");
    function loadText() {
   
        // 创建 XMLHttpRequest 对象
        var xhr = new XMLHttpRequest();
        
        // open(type, url, async) 
        // 参数1:请求的类型 "GET" 或 "POST"
        // 参数2:请求的目标地址 
        // 参数3:是否开启异步请求 true 或 false
        xhr.open("GET","sample.txt", true);
        xhr.onreadystatechange = function () {
   
            // 以文本的形式打印返回的内容
            console.log(this.responseText);
        }
        // 发送请求
        xhr.send();
     }      

3、XMLHttpRequest 对象中 onload 事件与 onreadystatechange 事件的区别

onloadonreadystatechange 两种方法都可以请求数据,不同之处在于状态码的不同,从而导致触发的时间不同。

readyStateXMLHttpRequest 对象的一个属性,当请求状态发生改变时,readyState 的值(状态码)也会发生改变:
readyState 状态码:

  • 0 : 请求未初始化
  • 1 : 服务器连接已建立
  • 2 : 请求已接收
  • 3 : 请求处理中
  • 4 : 请求已完成,且响应已就绪

status 也是 XMLHttpRequest 对象的一个属性,其记录 HTTP 请求状态码:
HTTP 状态码(这里仅列举一部分)

  • 200 - 服务器成功返回网页
  • 404 - 请求的网页不存在
  • 503 - 服务器暂时不可用

onreadystatechange

onreadystatechange 事件会在 this.readyState 状态码发生改变时触发

xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
   
    console.log(this.readyState);
}
// 2
// 3
// 4

onprogress 事件的触发条件是:当 readyState 状态码为 3 时。基于此设定,可以将一些加载动画放入 onprogress 事件函数中:

xhr.onprogress = function () {
   
    console.log(this.readyState);
}
// 3

onload

onload 事件会在 this.status200 时触发

xhr.onload = function () {
   
    console.log(this.status);
}
// 200

注意:当触发 onload 事件时,readyState 状态码一定为 4;

基于以上请求状态码的不同,可以封装一个事件函数来完善 onreadystatechange 事件:

// 创建 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
// 请求信息
xhr.open("GET", "example.txt", true);
// 绑定 onreadystatechange 事件
xhr.onreadystatechange = function () {
   
    if(this.readyState === 4 && this.status === 200) {
   
        console.log(this.responseText);
    } else if (this.status === 404) {
   
        console
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值