js 原生网络请求

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件 本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。 阅读详情

摘要:早在很多年前,我们发送网络请求都是通过刷新或者跳转页面来获取新的网络数据,从而达到渲染不同页面的需求,用户体验是很差的,直到 ajax 横空出生,才解决了这个问题,不需要刷新页面便可以获取请求数据,这也是后来前后端分离的重要根源,大大的提高了网页性能,优化了用户体验。
而 ajax 的核心就是我们今天要学的的原生请求,**XMLHttpRequest**对象。

一. XMLHttpRequer 对象

创建: 通过 new 来创建。

1. 使用 XHR
  • open: 接收三个参数,分别为请求类型,请求的URL,请求是否异步,该方法为发送请求做好准备
  • send: 接收一个参数,请求体发送的内容,如果不发送,必须写入null,该方法开始发送请求
  • status: 相应的 HTTP 状态码,当位于 200~300 或者 等于 304 时,说明响应成功返回。
  • responseText: 作为响应体返回的文本
  • statuesText: 响应 HTTP 的状态描述
  • abort: 该方法用来取消异步请求,会停止触发事件,调用该方法后应该取消对XHR对象的引用,不要重用XHR对象。
  • onreadystatechange: 用来监听请求位于哪个阶段,该方法应该在open前调用,该事件不会接收到event对象
  • readyState: 表示当前请求位于哪个阶段
    0: 未初始化,尚未调用 open
    1:已经调用open,尚未调用 send
    2:已经送,已经调用send,未收到响应
    3:接收中,已经收到部分响应
    4:完成,接收到所有响应
let xhr = new XMLHttpRequest(); // 创建XMLHttpRequest 实例
xhr.open("get", "http://127.0.0.1:3000/index", false); //设置为同步get请求
xhr.send(null); // 开始发送请求,并且阻塞后续代码执行,直到拿到响应
if((xhr.status >=200 && xhr.status <300) || xhr.status == 304){
	console.log(xhr.responseText) // 检验状态码
}else{
	console.log('请求失败')
}

使用readyState:
每次该值的改变,都会触发readystatechange 事件,因此我们可以在不同阶段执行不同操作

let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){ // 监听请求完成
	if((xhr.status >=200 && xhr.status <300) || xhr.status == 304){
		console.log(xhr.responseText)
	}else{
		console.log('请求失败')
		}
  	}
}
xhr.open("get", "http://127.0.0.1:3000/index", true); // 异步请求
xhr.send(null);
2. HTTP 头部

① 默认头部信息
每个HTTP 请求和响应都会携带头部信息,我们来看一下默认的一些请求头部

  • Accept: 浏览器可以处理的内容类型
  • Accept-Charset:浏览器可以显示的字符集
  • Accept-Encoding: 浏览器可以压缩的编码类型
  • Connection: 浏览器与服务的连接类型
  • Cookie:页面中设置的Cookie
  • Host: 发送请求页面所在的域
  • Referrer:发送请求的页面URL
  • User-Agent: 浏览器的用户代理字符串

②设置自定义头部信息

  • setRequestHeader(): 该方法接收两个参数,头部字段的名称和值,该方法必须在open之后,send 之前调用
  • getResponseHeader(): 从XHR对象获取响应头部,只需要传入获取头部的名称即可
  • getAllResponeHeaders(): 获取所有响应头信息
3. GET 请求

用于向服务器查询某些信息,数据直接显示在url中
① 传参
需要将信息编码后,添加到URL末尾,用 ? 隔开,各个参数用&隔开,参数的键值用=隔开

function addURLParam(url, name, value){
	const code = url.indexOf('?') == -1 ? '?' : '&';
	url += code;
	url += (encodeURIComponent(name) + '=' + encodeURIComponent(value))
	return url;
}
4. POST 请求

用于向服务器发送应该保存的数据,该数据在请求体中传输,只需要将要发送的数据写入send方法中即可。

let btn = document.getElementById('btn')
btn.onclick = function(){
	const xhr = new XMLHttpRequest();
	xhr.open('post', '/post', false);
	xhr.send('sssss')
}
5. XMLHttpRequest 标准2

① FormData 类型
用于将表单数据序列化,可以使用post请求模拟表单提交,使用该方法默认将请求类型,设置为表单格式。
xhr.setRequestHeader('Content-Type', "application/x-www-form-urlencoded")
实例反法:

  • append: 接收两个参数,通过键值对的方式,将数据填入表单
let form = new FormData();
form.append('age','12')
form.append('name', '石头山')
  • 也可以在构造函数中传入一个表单。
let form = new FormData(document.forms[0);

② 超时
用于表示发送请求后需要等待多少毫秒,如果响应不成功就中断请求

  • timeout: 用来设置超时时间,如果超时则会触发 ontimeout 事件,同时 readyState 的状态也会变成 4,同时调用 onreadystatechange 事件,并且超时之后访问 statues 属性会出错
    切记,同步请求不能设置超时
xhr.open('post', '/post', true); // 此处只能为 true 
xhr.timeout = 1000;
xhr.ontimeout = function(){
	console.log('请求超时')
	}
xhr.send(null)

二. 进度事件

  • loadstart: 在接收到响应的第一个字节时触发
  • progress: 在接收响应期间反复触发
  • error:在请求出错时触发
  • abort:在调用 abort()终止连接时触发
  • load: 在成功接收完响应时触发
  • loadend:在通信完成时,在error,abort,load之后触发
1. load事件

该属性用来题代 readystatechange 事件,但是有一个问题,只有从服务器收到响应,无论状态码是什么,都会触发该事件,因此还需要检验状态码来确保数据有效。

            const xhr = new XMLHttpRequest();
            xhr.open('get', '/index', true);
            xhr.onload = function(){
                if((xhr.status >= 200 && xhr.status<300) || xhr.status === 304){
                    console.log(xhr.responseText,'ss11');
                }else{
                    console.log('请求错误')
                }
            }
            xhr.send(null)
2. progress 事件

在数据接收期间,该事件反复触发,该事件对象有三个属性

  • lengthComputable: 表示进度信息是否可用
  • position:接收到的字节数
  • totalSize: 是响应体头部 Content-Length 的总字节数
            xhr.onprogress = function(event) {
                if(event.lengthComputable){
                    console.log(event.total, event.position)
                }
            }

三. 跨资源共享

1. 跨域安全策略

默认情况XHR只能访问与发起请求的页面在同一个域内的资源。

  • 原生跨域:给open传入一个绝对路径则跨源访问
  • 限制:
    1. 不能是使用setRequestHeader() 设置自定义头部
    2. 不能发送和接收cookie
    3. getAllResponseHeaders() 方法始终返回 空字符串
      因此,在访问本地资源时使用相对路径,访问远程资源时使用绝对路径
2. 预检请求

通过该机制,允许使用自定义头部,除GET和POST外的方法,在发送请求时先发送一个预检请求,这个请求使用OPTIONS方法发送以下头部。

  • Origin:与简单请求相同
  • Access-Control-Request-Method: 请求希望使用的方法
  • Access-Control-Request-Headers: 自定义头部列表
    服务器可以确定是否允许这种类型的请求。会在响应中发送如下头部
  • Access-Control-Allow-Origin: 允许的同源
  • Access-Control-Allow-Methods: 允许的方法
  • Access-Control-Allow-Headers: 允许的自定义头部
  • Access-Control-Allow-Max-Age: 缓存预检请求的秒数
    预检请求返回后,会缓存一段时间,在这段时间内再次访问不需要预检。
3. 凭据请求

默认情况下,跨源请求不提供凭据,cookie,http认证,SSl证书。可以通过将withCredentials 属性设置为true来表明请求会发送凭证。如果服务器允许携带,则在响应头部添加
Access-Control-Allow-Credentials: true.

四. 替代性跨源技术

1. 图片探测
2. JSONP
python123题目——判断火车票座位B(异常) 类型:流程控制。 阅读详情

相关推荐

合并数组与非合并数组——SystemVerilog

合并型数组(packed): — 合并型数组可以实现连续的存储,赋值时不需要用 '{ }。 //合并型数组 bit [3] [7:0] b_pack // 表示3行 x 8列的数组,[3]是高维度(高维度),[7:0]是低维度(第一维) 数组中,数据排列为{b_pack[3],b_pack[2],b_pack[1],b_pack[0]},其中每个b_pack为8个bit; bit是二值逻辑,每位bit只占据1位。故24位bit只占据一个word(一般一个word为32bit)的存储空间

SummerXRT的博客 7638

原生 JavaScript 发送请求

Fetch API是现代浏览器提供的用于处理网络请求的强大工具。它提供了一种简单、灵活和强大的方式来获取数据,而无需依赖旧的。

weixin_67724481的博客 2739

偏最小二乘结构方程(PLS-SEM)_TomatoSCI分析日记

①模型整体拟合指标(Goodness-of-Fit, GOF),这个可以看做整体的R方了,上限是1;②指标载荷的具体值;然而,当数据中包含潜变量(即由多个观测指标组合而成的综合概念)时,贝叶斯结构方程不太适用。指标过少(1-2 个)会削弱潜变量的解释力,而指标过多可能增加噪声,影响模型稳定性。如果指标较多,可考虑进一步划分潜变量,但应确保每个指标有意义。掌握这两类方法后,在处理多变量、因果或路径分析研究时,可以根据数据特点与研究需求灵活选择。对于一般的多变量研究,这两类结构方程均为常用且有效的分析方案。

qq_44684643的博客 2009

js原生请求

js原生请求get var httpRequest = new XMLHttpRequest();//第一步:建立所需的对象 httpRequest.open('GET', 'url', true);//第二步:打开连接 将请求参数写在url中 ps:"./Ptest.php?name=test&nameone=testone" httpRequest.send();//第三步:发送...

qq_40663497的博客 4805

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB)论坛为局域网论坛,仅供内部同事交流使用!使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M) 下图:模拟上传84M的文件(

骚团长的博客 1828

逆向解析M团外卖mtgsig与waimai_sign加密参数实战指南⊙ω⊙

本文详细解析了M团外卖App中mtgsig与waimai_sign两个核心加密参数的逆向分析与生成方法。通过抓包定位、静态逆向与Frida动态调试,拆解了waimai_sign的RSA签名逻辑与mtgsig的复杂参数组装加密流程,并提供了Python模拟实现的框架与调试心得,为安全研究及合规数据分析提供实战指南。

weixin_29327525的博客 1280

JS原生:XMLHttpRequest发送GET&POST请求

学到了xhr发起GET和POST请求,在此记录一下。

欢迎来到长风沛雨的博客 1万+

告别图像畸变:手把手教你用HALCON的`gen_image_to_world_plane_map`做高精度视觉测量

本文详细解析了HALCON的`gen_image_to_world_plane_map`算子在工业视觉测量中的应用,通过精确的几何变换消除透视畸变,提升测量精度。文章涵盖相机标定、世界坐标系建立、实战应用及性能优化,适用于液晶屏质检、金属板检测等场景,帮助工程师实现高精度视觉测量。

weixin_28718487的博客 423

js原生方式发送http请求

事件处理程序中,我们判断请求的状态和返回的状态码,如果都符合条件,就将返回的数据进行处理并输出;onloadend:当请求结束时触发,无论请求成功(load)还是失败(abort 或 error)。可以将body里面所有的json数据传到后端,后端再进行解析。方法指定要发送的请求的URL和类型(此处为GET请求)。onprogress:当请求接收到更多数据时,周期性触发。的不同值,代表了不同的状态。, 就可以访问从服务器返回的数据了。onload:请求成功完成时触发。方法监听返回结果,也是可以的。

在青海看海的企鹅的博客 2174

【回答问题】ChatGPT上线了!如何安装python-ipopt?python-ipopt有哪些用法?

python-ipopt是一种基于Python语言的求解非线性最优化问题的软件包。它使用了Interior Point Optimizer(IPOPT)算法来求解最优化问题。这段代码使用python-ipopt求解了一个无约束的非线性最小化问题,其目标函数为(x[0] - 1) ** 2 + (x[1] - 2) ** 2,求解结果为x_opt。求解线性规划问题、二次规划问题、二次范数最小化问题等类型的最优化问题。对于给定的最优化问题,可以设置不同的求解参数来控制求解的精度和效率。

源代码杀手的博客 2144

需求跟踪详解

需求跟踪是指在软件项目开发过程中,建立并维护需求与项目各阶段工作产物(如设计文档、代码模块、测试用例等)之间对应关系的过程。它不仅记录需求从提出到实现的完整路径,还能反映需求变更时对各阶段工作的影响范围,是连接用户期望与实际软件开发产出的桥梁。

跟佟格湾一起学习计算机知识吧~ 1422

js原生请求及其封装

XMLHttpRequest 在 AJAX 编程中被大量使用。AJAX 允许只更新一个 HTML 页面的部分 DOM,而无须重新加载整个页面。AJAX 还允许异步工作,这意味着当网页的一部分正试图重新加载时,您的代码可以继续运行(相比之下,同步会阻止代码继续运行,直到这部分的网页完成重新加载)。AJAX(Asynchronous JavaScript And XML )是一种使用 XMLHttpRequest 技术构建更复杂,动态的网页的编程实践。

qq_38367703的博客 1543

46、聚类算法在智能交通数据分析中的应用

本文探讨了聚类算法在智能交通数据分析中的应用,介绍了K-均值算法、K-中心点算法和基于模型的聚类算法的基本原理及特点,并结合实际交通数据讨论了其应用场景与挑战。通过聚类分析,能够从海量交通数据中发现隐藏模式,为交通管理和规划提供科学依据。文章还展示了具体的案例分析和实现流程,为未来智能交通系统的发展提供了参考。

zz67890的博客 133

原生html如何发送网络请求,原生JS向服务器发送GET请求

原生JS向服务器发送GET请求使用Jquery可以很方便的进行GET与POST请求,但是在开发由于一些特殊原因只能使用原生JS进行开发,向服务器发送请求经常会遇见的些问题,本文主要讲解如何使用原生JS向服务器发送请求创建HTTPRequestfunction createXMLHttpRequest() {var xmlHttp;if (window.XMLHttpRequest) {xmlHtt...

weixin_35784370的博客 1572

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaScript 之 原生网络请求

XMLHttpRequest 对象 XMLHttpRequest对象是ajax的基础,XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。目前所有浏览器都支持XMLHttpRequest。 方 法 描 述 abort() 停止当前请求 getAllResponseHeade...

z_x_Qiang的博客 2765

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

原生js访问网络请求

原生js访问网络请求 ` function ajax(opt) { let url="https://xxxxx.com" opt = opt || {}; opt.method = opt.method.toUpperCase() || 'POST'; opt.url =url+ opt.url || ''; opt.async = opt.async || true; opt.data = opt.data || null; opt.success = o

牵着蜗牛去旅行的博客 2727

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

js原生网络请求数据

用js请求网络数据 第一种方法://ajax 对象 function ajaxObject() { var xmlHttp; try { // Firefox, Opera 8.0+, Safari xmlHttp = new XMLHttpRequest(); } catch (e) { // Intern...

一现灵光 1万+

原生JS、JQuery实现Ajax请求的方法

一)使用jQuery库实现Ajax请求。

smallqiang的专栏 262

原生html如何发送网络请求,原生JS发送HTTP请求的方式:XMLHttpRequest.send()

在前端开发过程中,就目前来看,发送HTTP请求,大家习惯在框架里去应用,比如vue,react等。我们在往前追朔下,用的最多的是jQuery里的ajax。但是最原始的发送HTTP请求方式是什么呢?一起了解下~~其实就是XMLHttpRequest.send()。说明XMLHttpRequest.send() 方法用于发送 HTTP 请求。如果是异步请求(默认为异步请求),则此方法会在请求发送后立即...

weixin_39805119的博客 2219

javascript原生网络请求对象XMLHttpRequest的使用

默认的POST请求通常为Form表单格式,则设置请求头的Content-Type为application/x-www-form-urlencoded。1、是默认的表单类型:application/x-www-form-urlencoded。2、JSON格式类型: application/json。3、文件类型:multipart/form-data。

qq_41765777的博客 1009

原生方法js网络请求

function ajax(opt) { opt = opt || {}; opt.method = opt.method.toUpperCase() || ‘POST’; opt.url = opt.url || ‘’; opt.async = opt.async || true; opt.data = opt.data || null; opt.success = opt.success || function () {}; var xmlHttp = null; if (XMLHttpRequest)

weixin_39501680的博客 393

原生js发送网络请求获取文件流下载#原生JS #POST #文件下载

原生js实现POST请求接口文件下载zip等格式

weixin_45385944的博客 1235

ajax请求php原生,网络编程原生javascript的ajax请求及后台PHP响应操作示例

本文实例讲述了原生javascript的ajax请求及后台PHP响应操作。分享给大家供大家参考,具体如下:Document学号:密码:ajax的一般步骤1、创建对象let xhr = new XMLHttpRequest();2、设置请求参数xhr.open(请求方式,请求地址,是否异步);3、设置回调函数xhr.onreadystatechange = function () {// 5、接收响...

weixin_34438187的博客 143

【网络安全零基础入门】一文搞懂Javascript实现Post请求、Ajax请求、输出数据到页面、实现前进后退、文件上传

重点是meta元素,其属性“HTTP-EQUIV”设置为“refresh”时,会自动刷新当前页面,此属性包含两个重要的设置:CONTENT和URL,CONTENT表示自动刷新的时间间隔,URL表示刷新后的页面地址。后退和前进是页面浏览时最常用的操作,系统自带浏览器可以完成这三个功能,在Web应用系统中,有时需要屏蔽浏览器的工具栏,此时需要使用代码实现页面的这三个操作。需要注意的是,由于安全限制,JavaScript在浏览器中无法直接访问文件的内容,只能通过用户主动选择文件才能获取到。作为请求的主体数据。

白帽阿叁的博客 1021

AJAX:原生Js封装AJAX网络请求

W3C官方文档 https://www.w3school.com.cn/ajax/index.asp MDN https://developer.mozilla.org/zh-CN/docs/Web/Guide/AJAX 1. 创建 XMLHttpRequest 对象 const xmlhttp=new XMLHttpRequest(); 2. 向服务器发送请求 xmlhttp.open("G...

h284306976的博客 325

【网络安全零基础入门必知必会】Javascript实现Post请求、Ajax请求、输出数据到页面、实现前进后退、文件上传(02)

这是成哥给粉丝朋友准备的网络安全零基础入门第五章Javascript的知识章节里的Javascript实现效果示例。

qq_44005305的博客 964
上一篇: js原生事件
下一篇: Vue.mixin 源码深入理解
程序员-石头山
博客等级 码龄6年 1122粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员-石头山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值