xhr ajax超时时间,WEB前端第六十一课——xhr对象POST请求、xhr兼容性、timeout、progress...

本文详细讲解了Ajax中POST请求的FormData构建、xhr对象的兼容处理、请求超时设置以及如何使用progress元素实现文件上传进度条。重点介绍了GET与POST请求的区别,并提供了实例代码和常见应用场景。

1.xhr对象发送post请求

Ajax中post请求与get请求不同之处在于多了一个表单,而get请求则是通过url发送附加信息。

在xhr对象中,post请求可以通过FormData构建表单数据。

语法:var formData = new FormData();

formData.append('key',value);  //value为字符串时需要使用引号。

xhr.send(formData);

说明:formData的创建必须在“xhr.send(formData)”之前!

示例:

var userName = document.querySelector('.userName').value;

var userCode = document.querySelector('.userCode').value;

var formData = new FormData();  //FormData()为系统内置对象类

formData.append('uName',userName);

formData.append('uCode',userCode);

xhr.send(formData);

补充:

⑴ GET请求的主要特点:

GET请求可被缓存,请求保留在浏览器历史记录中

GET请求可被收藏为书签

GET请求不应在处理敏感数据时使用

GET请求有长度限制

GET请求只应当用于取回数据

⑵ POST请求的主要特点:

POST请求不会被缓存,不会保留在浏览器历史记录中

POST请求不能被收藏为书签

POST请求对数据长度没有要求

⑶ 与POST相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,需使用POST请求:

无法使用缓存文件(更新服务器上的文件或数据库)

向服务器发送大量数据(POST没有数据量限制)

发送包含未知字符的用户输入时,POST比GET更稳定也更可靠

参考资料:w3cschool

2.xhr对象兼容问题

xhr对象的获取方式在 IE 和 非IE 环境下需要使用不同的方法。

语法:

IE浏览器支持的方法:ActiveXObject('')

非IE环境支持的方法:XMLHttpRequest()

因此,在创建 xhr 对象时需要进行判断,示例如下:

if(window.XMLHttpRequest){

var xhr = new XMLHttpRequest();

}else if(window.ActiveObject){

var xhr = new ActiveXObject('');

}

也可以直接使用三目运算进行处理:

xhr = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("");

3.请求超时

timeout 属性值等于一个整数,用于设置当请求发出后等待接收响应的时间。

ontimeout() 方法则是等待超时后,自动执行的回调函数。

语法:

xhr.timeout == n;    //时间单位“毫秒”,表示请求发出后响应等待时间。

xhr.ontimeout = function(){

console.log('The request for'+url地址+'time out');

}

说明:如果在设置的时间内没能收到后台响应内容,则视为请求超时自动执行ontimeout函数。

如果该属性设置等于 0(默认值),表示没有时间限制!

代码示例html>

原生Ajax请求

登录账户

登录密码

登录

var uName = document.querySelector('.userName');

var uCode = document.querySelector('.userCode');

var btn = document.querySelector('button');

btn.onclick=function () {

//      var xhr=new XMLHttpRequest();   //创建对象,准备发送Ajax请求

//      考虑浏览器兼容性问题,创建 xhr 对象时需要进行判断。

if(window.XMLHttpRequest){

var xhr = new XMLHttpRequest();

}else{

var xhr = new ActiveXObject();

}

xhr.onreadystatechange=function () {    //监听后台接收请求状态的变化

if (xhr.readyState==4){             //判断当前请求进行到何种状态,属性值 4 表示后台已经接收到前台请求

if (xhr.status==200){           //判断前台是否准确接收到后台反馈的数据,属性值 200 表示通信成功

console.log(xhr.responseText);  //获取后台反馈的完整数据,json串

console.log(typeof xhr.responseText);   //返回结果为 string 类型

console.log(JSON.parse(xhr.responseText));   //解析返回结果转换为对象

}

}

}

xhr.timeout=2000;       //超时设置单位“毫秒”!!

xhr.ontimeout=function(){

alert('访问超时,请刷新页面重新加载。')

}

//      使用 get 方式发送请求:

xhr.open('get',"xhr.php?name="+uName.value+"&code="+uCode.value,true);

//         xhr.open('get',"xhr.php?name="+$('.userName').val()+"&code="+$('.userCode').val(),true);

xhr.send(null);

//      使用 post 方式发送请求:

/*        xhr.open('post','xhr.php',true);

var formD = new FormData();

formD.append('name',uName.value);

formD.append('code',uCode.value);

xhr.send(formD);*/

}

/*    $name1=$_POST['name'];

$code1=$_POST['code'];*/

$name1=$_GET['name'];

$code1=$_GET['code'];

$res = array('msg'=>'ok','info'=>$_GET);

$res['userName']=$name1;

$res['userCode']=$code1;

//    sleep(3);       //设置服务器睡眠,单位“秒”!!

echo json_encode($res);

?>

4.进度条

⑴ progress

HTML中使用标签用于定义运行中的任务进度。

progress属性有:

max,设置任务完成的值;

value,设置任务当前进度值。

注意:需要与JS配合使用显示任务进度;

不能用于表示度量衡,如存储空间使用情况(使用标签)

⑵ progress常用属性

lengthComputable,返回一个布尔值,表示当前进度是否有可计算长度,

默认为true,表示进度没有100%,进度100%时变为false;

total,返回一个整数,表示当前进度的总长度,

如果是通过HTTP下载资源,表示内容本身长度,不包含HTTP头部的长度,

如果lengthComputable属性值为false,则total属性无法取得正确的值。

loaded,返回一个数值,表示当前进度已经完成的数量,

该属性值除以total属性值,可以得到目前进度的百分比。

⑶ upload

upload是XMLHttpRequest对象的一个属性,其属性值亦是一个对象,

该对象定义了addEventListener()方法和整个progress事件集合。

代码示例:

html>

进度条

上传文件

function fileSubmit() {

var files=document.querySelector('.tempFile').files;

//  发送文件需要使用POST方式,创建FormData对象。

var fileData=new FormData();

for (var i=0,file;file = files[i];i++){

//  将文件添加到FormData对象中。

fileData.append('fileName',file.name);

}

//  使用append方法添加到FormData的数据,并不是以对象属性的方式存储,外界无法直接访问到数据

//  需要使用 for of 方法才能在控制台中打印输出。

for (var value of fileData.values()){

console.log(value);

console.log(typeof value);

}

//  Ajax请求对象

//     var xhr=new XMLHttpRequest();    //直接创建

if (window.XMLHttpRequest){         //兼容性方式创建

var xhr=new XMLHttpRequest();

}else if(window.ActiveXObject){

var xhr=new ActiveXObject('');

}

// var xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('');

//  监听请求响应通信状态

xhr.onreadystatechange=function () {

if (xhr.readyState==4){

if (xhr.status==200){

console.log(JSON.parse(xhr.responseText));      //FormData添加文件时,无法直接解析输出!

}

}

}

//  任务进度监听,当上传进度发生改变时,回调函数自动执行

var progressBar = document.querySelector('progress');

xhr.upload.onprogress=function(eve){

if (eve.lengthComputable){

progressBar.value = (eve.loaded/eve.total);

}

}

//  准备发送请求上传文件

xhr.open('post','progress.php',true);

xhr.send(fileData);

}

echo json_encode($_POST['fileName']);

?>

下载代码方式:https://pan.quark.cn/s/dd3561eca308 在软件开发领域,面向对象编程(OOP)是一种普遍采纳的结构化方法,它使得开发者能够借助模拟现实环境中的实体和关系来构建软件系统。在本案例中,我们观察到的是一个关于借助抽象类来执行不同几何图形面积求解的实践应用。现在,让我们详细分析这一议题。 标题 "应用抽象类计算面积" 清晰地表明我们将要讨论一个抽象类,此类设定了一个用于测量图形面积的标准函数,但并未提供实际的执行过程。抽象类在诸如C#或Java等编程语言中通常借助`abstract`修饰符进行声明,它们无法直接创建对象实例,仅能作为其他类的基础模板。 描述部分提及的"图形界面应用"暗示这是一个基于视觉用户界面(GUI)的系统,可能运用了.NET Framework的Windows Forms或WPF技术,或者是Java平台的Swing或JavaFX框架。在这样环境下,用户能够通过视觉元素与这些几何体进行互动,例如输入相关尺寸并观看到计算得出的面积值。 抽象类“几何体”内嵌了“计算面积”这一抽象函数。在代码层面,这可以被表述为: ```csharp public abstract class GeometricShape { public abstract double CalculateArea(); } ``` 随后,有三个派生类:圆(Circle)、矩形(Rectangle)和三角形(Triangle),它们各自提供了这个抽象函数的具体实现。比如,圆的面积是通过π乘以半径的平方得到的,矩形的面积是长和宽的乘积,而三角形的面积可能是底乘以高再除以2的结果。这些类将提供具体实现来计算它们各自的面积: ```csharp p...
内容概要:本文系统研究了移相控制全桥LLC谐振变换器的工作特性,深入分析其在不同工作模式下的运行机理与性能表现,重点探讨了软开关实现、高效率能量转换及宽范围电压调节等关键技术优势。通过Simulink搭建精确的仿真模型,对谐振腔参数、开关频率、电压增益、系统效率等关键指标进行仿真分析,验证了理论设计的正确性。同时,详细研究了移相控制策略对系统动态响应、稳定性和轻载/重载工况适应性的影响,揭示了控制参数与电路参数之间的耦合关系,为高频高效电源设计提供了理论依据和实践指导。; 适合人群:具备电力电子技术、模拟电路及自动控制理论基础,从事开关电源、新能源变换器、电动汽车充电模块或高频电源系统研发的工程师及高校研究生。; 使用场景及目标:①掌握全桥LLC谐振变换器的拓扑结构、工作原理与关键参数设计方法;②理解移相控制在实现零电压开通(ZVS)和零电流关断(ZCS)中的作用机制;③通过Simulink仿真掌握变换器建模、参数优化与性能评估流程,服务于实际产品开发与学术题研究。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作,重点关注谐振网络(Lr, Lm, Cr)参数与移相角之间的匹配设计,深入理解软开关条件的形成过程,并通过调整负载和输入电压进行多工况仿真,以全面掌握系统动态特性。
一、项目概述 本项目设计并实现了一个基于STM32F103C8T6微控制器的温湿度监测与报警系统。系统通过DHT11传感器实时采集环境温湿度数据,当数据超过预设阈值时,蜂鸣器发出声音报警,同时通过4位数码管实时显示当前温湿度值。整个系统采用Type-C接口供电,支持USB串口通信,便于数据调试与传输。 二、硬件组成 1. 主控模块:STM32F103C8T6最小系统(含晶振、复位、BOOT电路、去耦电容)。 2. 传感器模块:DHT11温湿度传感器(单总线通信)。 3. 报警模块:有源蜂鸣器(三极管驱动)。 4. 显示模块:4位共阴数码管(TM1637驱动)。 5. 通信模块:CH340N USB转串口芯片(Type-C接口)。 6. 电源模块:AMS1117-3.3稳压电路(5V转3.3V)。 7. 调试接口:SWD调试排针(SWDIO/SWCLK)。 三、开发流程 1. 原理图设计:使用嘉立创EDA绘制完整原理图,包含各功能模块。 2. PCB设计:进行PCB布局布线,注重电源完整性、信号隔离及晶振走线。 3. 制板焊接:嘉立创打样,手工焊接元器件。 4. 软件开发:STM32CubeMX配置工程,编写DHT11驱动、TM1637显示、串口通信及报警逻辑。 5. 调试测试:通过SWD下载程序,串口输出数据,测试温湿度采集与报警功能。 四、项目特点 - 完整的嵌入式系统开发流程(硬件设计→制板→软件编程→调试)。 - 多传感器数据融合与实时显示。 - 低功耗设计,支持USB供电与串口通信。 - 模块化设计,便于功能扩展(如添加WiFi模块、数据存储等)。 五、应用前景 适用于家庭环境监测、农业大棚、仓库温湿度监控等场景
内容概要:本文提出了一种基于TOGI-SOGI混合积分器的光储并网谐波自适应抑制方法,并通过Simulink实现完整仿真验证。该方法融合三重二阶广义积分器(TOGI)与标准二阶广义积分器(SOGI),能够精确提取电网电压中的基波正序分量,有效分离并抑制高次谐波成分,尤其在电网电压畸变条件下显著提升了并网逆变器的控制精度与电能质量。文中详细阐述了混合积分器的结构设计、谐波检测机制、自适应调节策略及其在锁相环(PLL)中的集成应用,并通过构建光储并网系统模型进行多工况仿真,结果表明该方法具备优良的动态响应特性、强鲁棒性及谐波抑制能力。; 适合人群:具备电力电子、新能源发电、自动控制等相关专业背景,熟悉Simulink仿真环境,从事光伏并网控制、电能质量治理、微电网运行与控制等领域研究的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于电网存在谐波污染的光伏发电并网场景,提升逆变器在非理想电网下的运行稳定性;②为基于广义积分器的先进锁相技术与谐波补偿策略提供理论支持与实现范例;③服务于高校科研项目复现、学位论文研究、电力电子控制器原型开发及学术成果验证。; 阅读建议:建议学习者结合提供的Simulink模型深入剖析TOGI-SOGI的内部信号流向与参数整定逻辑,重点关注谐波分量的解耦过程与自适应控制模块的实现机制,可通过设置不同谐波含量、频率偏移等扰动工况进行对比测试,以全面掌握其在复杂电网环境下的适应性与优越性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值