安全—02day

news2025/1/13 15:37:25

XMLHttpRequest 对象

AJAX 通过原生的XMLHttpRequest对象发出 HTTP 请求,得到服务器返回的数据后,再进行处理。现在,服务器返回的都是 JSON 格式的数据,
XMLHttpRequest本身是一个构造函数,可以使用new命令生成实例。它没有任何参数。

var xhr = new XMLHttpRequest();

AJAX 包括以下几个步骤。

  1. 创建 XMLHttpRequest 实例
  2. 发出 HTTP 请求
  3. 接收服务器传回的数据
  4. 更新网页数据

XMLHttpRequest对象是 AJAX 的主要接口,用于浏览器与服务器之间的通信。尽管名字里面有XMLHttp,它实际上可以使用多种协议(比如fileftp),发送任何格式的数据(包括字符串和二进制)。

XMLHttpRequest 的实例属性

一、XMLHttpRequest.readyState

XMLHttpRequest.readyState`返回一个整数,表示实例对象的当前状态。该属性只读。它可能返回以下值。

  • 0,表示 XMLHttpRequest 实例已经生成,但是实例的open()方法还没有被调用。
  • 1,表示open()方法已经调用,但是实例的send()方法还没有调用,仍然可以使用实例的setRequestHeader()方法,设定 HTTP 请求的头信息。
  • 2,表示实例的send()方法已经调用,并且服务器返回的头信息和状态码已经收到。
  • 3,表示正在接收服务器传来的数据体(body 部分)。这时,如果实例的responseType属性等于text或者空字符串,responseText属性就会包含已经收到的部分信息。
  • 4,表示服务器返回的数据已经完全接收,或者本次接收已经失败。
var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
  if (xhr.readyState === 4){
    if (xhr.status === 200){
      console.log(xhr.responseText);
    } else {
      console.error(xhr.statusText);
    }
  }
};

xhr.open('GET', 'http://127.0.0.1/code/text.html', true);
xhr.send(null);

在这里插入图片描述
如果地址写错,就会发生403错误。
在这里插入图片描述

二、XMLHttpRequest.onreadystatechange

XMLHttpRequest.onreadystatechange属性指向一个监听函数。readystatechange事件发生时(实例的readyState属性变化),就会执行这个属性。另外,如果使用实例的abort()方法,终止 XMLHttpRequest 请求,也会造成readyState属性变化,导致调用XMLHttpRequest.onreadystatechange`属性。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://127.0.0.1/code/text.html', true);
xhr.onreadystatechange = function () {
  if (xhr.readyState !== 4 || xhr.status !== 200) {
    console.log('正确');
  }
};
xhr.open('GET', 'http://127.0.0.1/code/text.html', true);
xhr.send(null);

在这里插入图片描述

三、XMLHttpRequest.response

XMLHttpRequest.response属性表示服务器返回的数据体(即 HTTP 回应的 body 部分)。它可能是任何数据类型,比如字符串、对象、二进制对象等等,具体的类型由XMLHttpRequest.responseType属性决定。该属性只读。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://127.0.0.1/code/text.html', true);
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 ) {
    handler(xhr.response);
  }
};
xhr.open('GET', 'http://127.0.0.1/code/text.html', true);
xhr.send(null);

在这里插入图片描述

四、XMLHttpRequest.responseType

XMLHttpRequest.responseType属性是一个字符串,表示服务器返回数据的类型。这个属性是可写的,可以在调用open()方法之后、调用send()方法之前,设置这个属性的值,告诉浏览器如何解读返回的数据。如果responseType设为空字符串,就等同于默认值text
XMLHttpRequest.responseType属性可以等于以下值。

  • “blob”:Blob 对象,表示服务器返回二进制对象。
  • “json”:JSON 对象。
  • “text”:字符串。
var xhr = new XMLHttpRequest();
xhr.responseType = 'josn';
xhr.open('GET', 'http://127.0.0.1/code/text.php', true);
xhr.send(null)

xhr.onload = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.response);
  }
};

在这里插入图片描述
如果将这个属性设为json,浏览器就会自动对返回数据调用JSON.parse()方法。也就是说,从xhr.response属性(注意,不是xhr.responseText属性)得到的不是文本,而是一个 JSON 对象。

五、XMLHttpRequest.responseText

XMLHttpRequest.responseText属性返回从服务器接收到的字符串,该属性为只读。只有 HTTP 请求完成接收以后,该属性才会包含完整的数据。

xhr.responseType = 'text';
xhr.onload = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
};

在这里插入图片描述

六、XMLHttpRequest.responseURL

XMLHttpRequest.responseURL属性是字符串,表示发送数据的服务器的网址。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://127.0.0.1/code/text.php', true)
xhr.onload = function () {
  console.log(xhr.responseURL);
};
xhr.send(null);

在这里插入图片描述

七、XMLHttpRequest.status,XMLHttpRequest.statusText

XMLHttpRequest.status属性返回一个整数,表示服务器回应的 HTTP 状态码。一般来说,如果通信成功的话,这个状态码是200;如果服务器没有返回状态码,那么这个属性默认是200。请求发出之前,该属性为0。该属性只读。

  • 200, OK,访问正常
  • 301, Moved Permanently,永久移动
  • 302, Moved temporarily,暂时移动
  • 304, Not Modified,未修改
  • 307, Temporary Redirect,暂时重定向
  • 401, Unauthorized,未授权
  • 403, Forbidden,禁止访问
  • 404, Not Found,未发现指定网址
  • 500, Internal Server Error,服务器发生错误
if (xhr.readyState === 4) {
  if ( (xhr.status = 200 && xhr.status < 300)
    || (xhr.status === 304) ) {
    // 处理服务器的返回数据
  } else {
    // 出错
  }
}

八、XMLHttpRequest.timeout,XMLHttpRequestEventTarget.ontimeout

XMLHttpRequest.timeout属性返回一个整数,表示多少毫秒后,如果请求仍然没有得到结果,就会自动终止。如果该属性等于0,就表示没有时间限制。

var xhr = new XMLHttpRequest();
var url = 'https://www.google.com';

xhr.ontimeout = function () {
  console.error('The request for ' + url + ' timed out.');
};

xhr.onload = function() {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
        console.log(xhr.responseText);
    } else {
      console.error(xhr.statusText);
    }
  }
};

xhr.open('GET', url, true);
xhr.timeout = 3 * 1000;
xhr.send(null);

在这里插入图片描述

事件监听属性

XMLHttpRequest 对象可以对以下事件指定监听函数。

  • XMLHttpRequest.onloadstart:loadstart 事件(HTTP 请求发出)的监听函数
  • XMLHttpRequest.onprogress:progress事件(正在发送和加载数据)的监听函数
  • XMLHttpRequest.onabort:abort 事件(请求中止,比如用户调用了abort()方法)的监听函数
  • XMLHttpRequest.onerror:error 事件(请求失败)的监听函数
  • XMLHttpRequest.onload:load 事件(请求成功完成)的监听函数
  • XMLHttpRequest.ontimeout:timeout 事件(用户指定的时限超过了,请求还未完成)的监听函数
  • XMLHttpRequest.onloadend:loadend 事件(请求完成,不管成功或失败)的监听函数
var xhr = new XMLHttpRequest();
var url = 'https://www.baidu.com';

xhr.onload = function() {
    var responseText = xhr.responseText;
    console.log(responseText);
   };
   
   xhr.onabort = function () {
     console.log('The request was aborted');
   };
   
   xhr.onprogress = function (event) {
     console.log(event.loaded);
     console.log(event.total);
   };
   
   xhr.onerror = function() {
     console.log('There was an error!');
   };
xhr.onload = function() {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
        console.log(xhr.responseText);
    } else {
      console.error(xhr.statusText);
    }
  }
};
xhr.open('GET', url, true);
xhr.timeout = 3 * 1000;
xhr.send(null);

在这里插入图片描述
注意,如果发生网络错误(比如服务器无法连通),onerror事件无法获取报错信息。也就是说,可能没有错误对象,所以这样只能显示报错的提示。

XMLHttpRequest 的实例方法

一、XMLHttpRequest.open()

XMLHttpRequest.open()`方法用于指定 HTTP 请求的参数,或者说初始化 XMLHttpRequest 实例对象。它一共可以接受五个参数。

  • method:表示 HTTP 动词方法,比如GETPOSTPUTDELETEHEAD等。
  • url: 表示请求发送目标 URL。
  • async: 布尔值,表示请求是否为异步,默认为true。如果设为false,则send()方法只有等到收到服务器返回了结果,才会进行下一步操作。该参数可选。由于同步 AJAX 请求会造成浏览器失去响应,许多浏览器已经禁止在主线程使用,只允许 Worker 里面使用。所以,这个参数轻易不应该设为false
  • user:表示用于认证的用户名,默认为空字符串。该参数可选。
  • password:表示用于认证的密码,默认为空字符串。该参数可选。

注意,如果对使用过open()方法的 AJAX 请求,再次使用这个方法,等同于调用abort(),即终止请求。

二、XMLHttpRequest.send()

XMLHttpRequest.send()方法用于实际发出 HTTP 请求。它的参数是可选的,如果不带参数,就表示 HTTP 请求只有一个 URL,没有数据体,典型例子就是 GET 请求;如果带有参数,就表示除了头信息,还带有包含具体数据的信息体,典型例子就是 POST 请求。

三、XMLHttpRequest.setRequestHeader()

XMLHttpRequest.setRequestHeader()方法用于设置浏览器发送的 HTTP 请求的头信息。该方法必须在open()之后、send()`之前调用。如果该方法多次调用,设定同一个字段,则每一次调用的值会被合并成一个单一的值发送。
该方法接受两个参数。
第一个参数是字符串,表示头信息的字段名,
第二个参数是字段值。

四、XMLHttpRequest.overrideMimeType()

XMLHttpRequest.overrideMimeType()方法用来指定 MIME 类型,覆盖服务器返回的真正的 MIME 类型,从而让浏览器进行不一样的处理。举例来说,服务器返回的数据类型是text/xml,由于种种原因浏览器解析不成功报错,这时就拿不到数据了。为了拿到原始数据,我们可以把 MIME 类型改成text/plain`,这样浏览器就不会去自动解析,从而我们就可以拿到原始文本了。

xhr.overrideMimeType('text/plain')

注意,该方法必须在send()方法之前调用。

五、XMLHttpRequest.abort()

MLHttpRequest.abort()方法用来终止已经发出的 HTTP 请求。调用这个方法以后,readyState属性变为4status属性变为0`。

load 事件、error 事件、abort 事件

load 事件表示服务器传来的数据接收完毕
error 事件表示请求出错
abort 事件表示请求被中断(比如用户取消请求)

var xhr = new XMLHttpRequest();

xhr.addEventListener('load', transferComplete);
xhr.addEventListener('error', transferFailed);
xhr.addEventListener('abort', transferCanceled);

xhr.open();

function transferComplete() {
  console.log('数据接收完毕');
}

function transferFailed() {
  console.log('数据接收出错');
}

function transferCanceled() {
  console.log('用户取消接收');
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

T113_PRO-S3_GPS解析

今天主要是以市面上能买到的最新款的GPS作为解析的依据&#xff0c;市面上能买的GPS目前最新的串口打印的格式主要是如下&#xff1a; $GNGGA,085126.000,2311.77819,N,11323.44968,E,1,15,1.5,36.7,M,0.0,M,,*4C $GNGLL,2311.77819,N,11323.44968,E,085126.000,A,A*4B $GPGSA…

Java入门-0基础学Java-01Java环境变量配置

JDK的下载与安装jdk下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择与电脑系统匹配的版本进行下载&#xff08;Windows系统如果是32位下载Windows x86&#xff0c;64位下载Windows x64&#xff0c;苹果的下载M…

Go语言设计与实现 -- 调度器总体概述

Go语言调度器使用与CPU数量相等的线程来减少线程频繁切换带来的内存开销&#xff0c;同时在每一个线程上执行额外开销更低的Goroutine来降低操作系统和硬件的负载。 每一次线程上下文切换都需要消耗约1us的时间&#xff0c;而Go调度器对Goroutine的上下文的切换约为0.2us&#…

01_FreeRTOS基础知识

目录 裸机与RTOS介绍 裸机与RTOS特点 FreeRtos简介 任务调度简介 抢占式调度 时间片调度 协程式调度 任务状态 裸机与RTOS介绍 假设小明在打游戏,此时女盆友微信回复了信息。 裸机:在裸机上实现是等这游戏打完之后,在去回复女朋友的信息,假设游戏刚刚开始打完需要半小…

使用缓存保护MySQL

1 更新缓存最佳实践 Redis的执行器非常薄&#xff0c;所以Redis只支持有限API&#xff0c;几乎没聚合查询能力&#xff0c;也不支持SQL。存储引擎也简单&#xff0c;直接在内存中用最简单数据结构保存数据。 如Redis的LIST在存储引擎的内存中的数据结构就是双向链表。内存是易…

基于ONNX人脸识别实例(SCRFD/ArcFace)-C#版

一、引用 Microsoft.ML.OnnxRuntime OpenCvSharp OpenCvSharp.Extensions二、人脸检测(Face Detection) using System; using System.Collections.Generic; using System.Linq; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp;…

c++11 标准模板(STL)(std::deque)(十)

定义于头文件 <deque> std::deque 修改器 移除首元素 std::deque<T,Allocator>::pop_front void pop_front(); 移除容器首元素。若容器中无元素&#xff0c;则行为未定义。 指向被擦除元素的迭代器和引用被非法化。若元素是容器中的最后元素&#xff0c;则尾后…

2022 数字IC设计秋招复盘——数十家公司笔试题、面试实录

0 引言 秋招结束了。 “今年是前五年最差的一年&#xff0c;也将是后五年最好的一年”&#xff0c;虽然无法预知后面的就业情况&#xff0c;但就我今年自己的亲身经历与去年师兄师姐找工作的情况对比&#xff0c;感觉难度确实是增大了很多。我总共投递了80家左右的公司&#…

德云社相声春晚未播先火,郭德纲独揽三个节目,四位老艺术家助阵

随着央视春晚的二次彩排&#xff0c;德云社相声春晚&#xff0c;也被安排到议事日程当中&#xff0c;听说今年的相声春晚还颇有看点。由于缺少了岳云鹏张云雷等得力干将&#xff0c;郭德纲老师决定亲自下场&#xff0c;一个人就独揽了三个节目。 按说德云社举办相声春晚&#x…

乒乓普及套及廉价底板评测

疫情的末端期间开始打乒乓球&#xff0c;最开始在单位打&#xff0c;后来去了花园和大爷们打。用了几个拍子和胶皮&#xff0c;都是网上最便宜的&#xff0c;现在在野球场能排到前十吧&#xff0c;我打球比较“正”&#xff08;他人评价&#xff09;&#xff0c;大家比较愿意和…

基于Java+SpringBoot+vue+element等动物救助平台设计和实现

基于JavaSpringBootvueelement等动物救助平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

数字人民币创新浪潮来袭,支付机构如何“乘风破浪”?

易观&#xff1a;近年来&#xff0c;数字经济浪潮迭起&#xff0c;数字科技方兴未艾。法定数字货币作为各国政府掌握货币发行控制权的重要载体&#xff0c;正在全球范围内全面铺开。法定数字货币的推出将大幅提升货币的流转效率&#xff0c;为央行管理职能赋予了数字化内涵。可…

Golang 常用字符串函数

统计字符串长度&#xff0c;按字节 len(str)str : "你好" fmt.Println("len", len(str))字符串遍历&#xff0c;同时处理有中文的问题 s : []rune(str)str : "你好" s : []rune(str) for i : 0; i < len(s); i {fmt.Printf("string%c\n&…

安全知识答题小程序v2.0与v3.0的异同点一览

安全知识答题小程序安全知识答题小程序这个软件架构是微信原生小程序云开发。主要包含六大功能模块页面&#xff0c;首页、答题页、结果页、活动规则页、答题记录页、排行榜页。v2.0的功能有以下&#xff1a;排行榜页答题记录页活动规则页微信授权登录获取微信头像和昵称等首页…

SQL SELECT TOP, LIMIT, ROWNUM 子句

SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; Oracle 可以使用…

java后端第五阶段:Git

一、开发场景 备份、代码还原、协同开发、追溯问题代码的编写人和编写时间&#xff01; 安装&#xff1a;直接去官网下载&#xff0c;傻瓜式安装 二、Git常用指令 1.设置用户签名 git config --global user.name 用户名 git config --global user.email 邮箱 2.初始化本地仓…

用存储过程、定时器、触发器来解决数据分析问题

做数据分析或者数据处理&#xff0c;我们也需要掌握这些技能&#xff0c;来解决特定的业务问题。比如&#xff1a;做自动化报表&#xff0c;如果数据需要每天实时更新&#xff08;增量爬虫&#xff09;、定时计算某个业务指标 、想要实时监控数据库表中的数据增、删、改情况等。…

四万字总结Redis语法、配置、实战

文章目录一、安装1.Linux下安装下载解压安装修改配置设置环境变量启动、连接查看redis进程退出2.windows下安装下载并解压二、系统管理1.常用key相关的命令2.时间相关命令3.设置相关命令CONFIG GET & CONFIG SET4.查询信息5.密码设置三、基本数据类型1.Redis strings2.Redi…

Golang常用结构源码01-Map

Golang集合源码-Map 22届211本科&#xff0c;在字节实习了一年多&#xff0c;正式工作了半年&#xff0c;工作主要是golang业务研发&#xff0c;go语言使用和生态比java简洁很多&#xff0c;也存在部分容易遇见的问题&#xff0c;常用结构需要对其底层实现略有了解才不容易写出…

小程序学习笔记

注册小程序账号 www.mp.weixin.qq.com 获取appid 微信开发者工具下载 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 设置代理和外观 创建小程序项目 小程序项目结构 app.json文件 这个文件的第一个路径就是小程序的默认页面 window配置项 …