Ajax 两种请求方式的区别onload和onreadystatechange

一. onreadystatechange

1. XMLHttpRequest对象有一个属性readyState,将其(xhr.readyState)打印后发现。进入onreadystatechange请求方式中时,可以打印其状态为2,状态为3,状态为4。
<button id="btn">请求纯文本</button>
    <script>
        let btn = document.getElementById(‘btn‘);
        btn.addEventListener("click",loadText);
        function loadText(){
            let xhr = new XMLHttpRequest();
            xhr.open(‘GET‘,‘sample.txt‘,true);
            xhr.onreadystatechange = function(){
                console.log("READYSTATE"+ xhr.readyState);
                console.log(this.responseText);
            }
            xhr.send();
        }
    </script>

2. readyState状态码和HTTP状态码

  • 如果在上方代码中的open方法下,打印readyState属性,可得到状态码1
3. 可以利用网络请求码和readyState状态码进行判断
  • 当网络请求码为200(服务器成功返回网页),readyState状态码为4时(请求已完成,响应已就绪),方可打印请求的数据。如图,在readyState状态码3的情况下不会再打印请求返回的数据。
function loadText(){
            let xhr = new XMLHttpRequest();
            xhr.open(‘GET‘,‘sample.txt‘,true);
            console.log("READYSTATE"+ xhr.readyState);
            xhr.onreadystatechange = function(){
                console.log("READYSTATE"+ xhr.readyState);
                if(this.status == 200 && this.readyState == 4){
                    console.log(this.responseText);
                }else if(this.status == 404){
                    console.log("网页不存在");
                }

            }
            xhr.send();
        }

4. 如果此时将open中的路径改为一个错误路径,会产生如下效果

二. onload

1. 进入onload之后,只出现了状态码4。也就是说,只有处于状态码4,请求已完成,响应已就绪的情况下,才会进入onload。只要进入onload请求中,一定是已经到4这个状态了。
 function loadText(){
            let xhr = new XMLHttpRequest();
            xhr.open(‘GET‘,‘sample.txt‘,true);
            console.log("READYSTATE"+ xhr.readyState);
            //两种请求方式onload和onreadystatechange
            xhr.onload = function(){
                console.log("READYSTATE"+ xhr.readyState);
                console.log(this.responseText);
            }
            xhr.send();
}

2. 此时如果修改open中的路径为错误路径的话,会出现如下状况。仍然会打印1和4,证明已经进入onload请求状态。这里报错的原因是,HTTP状态码不是200。

3. 实现页面尚未加载完成使,加载页面的实现(eg:进度条或转圈)。可用onprogress方法,打印readyState出现状态3
function loadText(){
            let xhr = new XMLHttpRequest();
            xhr.open(‘GET‘,‘sample.txt‘,true);
            console.log("READYSTATE"+ xhr.readyState);
            //两种请求方式onload和onreadystatechange
            xhr.onprogress = function(){
                console.log("测试加载状态READYSTATE"+ xhr.readyState);
            }
            xhr.onload = function(){
                console.log("READYSTATE"+ xhr.readyState);
                console.log(this.responseText);
            }
            xhr.send();
        }

三. 将请求到的纯文本附在dom中

xhr.onload = function(){
   document.getElementById(‘text‘).innerHTML = this.responseText;
}

3人点赞

日记本

作者:祝名
链接:https://www.jianshu.com/p/f914c9c8f4e7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/ygunoil/p/12565543.html

时间: 2024-10-05 05:05:10

Ajax 两种请求方式的区别onload和onreadystatechange的相关文章

GET,POST两种请求方式的区别

非原创,出处(http://blog.csdn.net/mfe10714022/article/details/39692305) Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作.到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般

Ajax中的get和post两种请求方式的异同

Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程.   2. 对于get方式,服务器端用Request.QueryS

jQuery中的Ajax几种请求方式

1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中. url (String) : 请求的HTML页的URL地址. data (Map) : (可选参数) 发送至服务器的 key/value 数据. callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数. 这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的.jQuery

多线程两种实现方式的区别

请解释Thread类与Runnable接口实现多线程的区别?(请解释多线程两种实现方式的区别?) 1. Thread类时Runnable接口的子类,使用Runnable接口实现多线程可以避免单继承局限!2. Runnable接口实现的多线程可以比Thread类实现的多线程更加清楚的描述数据共享的概念! 请写出多线程两种实现操作?(写出Thread类继承的方式和Runnable接口实现的方式代码!) 实现Thread类: 类似于代理设计模式! class MyThread extends Thre

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

转:Ajax中的get和post两种请求方式的异同

1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. 2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据.两种方式的参数都可以用Request来获得. 3.get传送的数据量

SVN 中两种Revert方式的区别

SVN中,当我们需要revert之前的commit的时候,有两个选项: 1. Revert to this revision 2. Revert changes from this revision 下面说一下两种方式的区别: 假设我们有四个连续的commit : 1, 2, 3, 4 对于commit 2 选择Revert to this revision,那么,只有1,2的改变被保留,3, 4的改变会被取消. 选择 Revert changes from this revision,那么,1

Java多线程的两种实现方式的区别以及深刻同步问题中的锁对象

首先我们知道创建线程有两种方式: 1.继承Thread类:2.实现Runnable接口. 但是这两这并非完全一样的.下面谈谈区别: 因为Java并不支持多继承的(接口是可以多继承接口的.不过一般我们不提),但支持多实现.当一个类继承了父类,就不能再继承Thread类,只能通过实现接口的形式创建线程. 继承Runnable接口更加符合面向对象的思想.线程分为两部分,一是线程对象,二是线程任务.继承Thread类,线程对象和线程任务(run方法内的代码)耦合在一起.一旦创建了Thread类的子类对象

Modbus关于ASCII模式和RTU模式两种传输方式的区别

常用的MODBUS通讯规约有两种,一种是MODBUS ASCII,一种是MODBUS RTU.每个设备必须都有相同的传输模式.所有设备都支持RTU模式,ASCII传输模式是选项.除此之外ASCII模式和RTU模式还有什么区别呢? 1.ASCII模式 当控制器设为在Modbus网络请添加链接描述上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit 字节都作为两个ASCII字符发送.这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误. 代码系统 十六进制,ASCII字符0