XHR level2的新功能

news/2024/11/26 4:32:41/

设置HTTP请求的时限

xhr.timeout=3000;

最长等待3秒就自动停止HTTP请求。还有一个timeout事件,用来指定回调函数

xhr.ontimeout=function(event){alert('请求超时');
}

设置FormData对象管理表单数据

// 1、创建 FormData 实例
var fd = new FormData();
// 2、调用 append函数,向fd中追加数据
fd.append('uname', 'zs');
fd.append('upwd', '123456');
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://www.liulongbin.top:3006/api/formdata');
xhr.send(fd);
​
xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {console.log(JSON.parse(xhr.responseText));}
}

直接获取form表单中的数据

// 1、通过 DOM 操作,获取到 form 表单元素
var form = document.querySelector('#form1');
​
form.addEventListener('submit', function(e) {// 阻止表单默认行为e.preventDefault();
​// 创建 FormData 快速获取到 form 表单中的数据var fd = new FormData(form);
​var xhr = new XMLHttpRequest();xhr.open('POST', 'http://www.liulongbin.top:3006/api/formdata');xhr.send(fd);
​xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {console.log(JSON.parse(xhr.responseText));}}
})

上传文件

1、定义UI结构

<!-- 1、文件选择框 -->
<input type="file" id="file1">
<!-- 2、上传文件的按钮 -->
<button id="btnUpload">上传文件</button>
<br />
<!-- 3、img 标签,来显示上传成功以后的图片 -->
<img src="" alt="" id="img" width="800">

2、验证是否选择了文件

// 1、获取到文件上传按钮
var btnUpload = document.querySelector('#btnUpload');
// 2、为按钮绑定点击事件处理函数
btnUpload.addEventListener('click', function() {// 3、获取到用户选择的文件列表var files = document.querySelector('#file1').files;if (files.length <= 0) {return alert('请选择要上传的文件');}

3、向FormData 中追加文件

   var fd = new FormData();// 将用户选择的文件,添加到FormData中fd.append('avatar', files[0]);

4、使用 xhr 发起上传文件的请求

      var xhr = new XMLHttpRequest();xhr.open('POST', 'http://www.liulongbin.top:3006/api/upload/avatar');xhr.send(fd);

5、监听 onreadystatechange事件

       xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {var data = JSON.parse(xhr.responseText);if (data.status === 200) {// 上传成功document.querySelector('#img').src = 'http://www.liulongbin.top:3006' + data.url;} else {// 上传失败console.log('图片上传失败!' + data.message);}}}

获取数据传输的进度信息

//创建 XHR 对象var xhr = new XMLHttpRequest();
//监听 xhr.Upload的 onprogress 事件
xhr.upload.onprogress = function(e) {//e.lengthComputable 是一个布尔值,表示当前上传的资源是否有可计算的长度if (e.lengthComputable) {// 计算出上传的进度//e.loaded 已传输的字节//e.total 需要传输的总字节var procentComplete = Math.ceil((e.loaded / e.total) * 100);console.log(procentComplete);}
}

监听上传完成的事件

xhr.upload.onload = function() {}

使用jquery上传文件

    <input type="file" id="file1"><button id="btnUpload">上传文件</button><br/><img src="assets/loading.gif" style="display: none;" id="loading" />

发起请求(必须使用Ajax,不能使用$.post)

 $.ajax({method: 'POST',url: 'http://www.liulongbin.top:3006/api/upload/avatar',data: fd,//不对  processData 中的数据进行 url 编码,而是将 FormData 数据原样发送到服务器processData: false,//不修改 content-Type 属性,使用 FormData 默认的 content-Type值contentType: false,success: function(res) {console.log(res);}})

jQuery实现loading效果

ajaxStart(callback)

Ajax请求开始时,执行ajaxStart请求函数。可以在该函数的callback中显示loading效果

注:$(document).ajaxStart()函数会监听当前文档内所有的Ajax请求

// 监听到Ajax请求被发起了
$(document).ajaxStart(function() {$('#loading').show();
});

ajaxStop(callback)

Ajax请求结束时,执行ajaxStop函数。可以在该函数的callback中隐藏loading效果

// 监听到Ajax完成
$(document).ajaxStop(function() {$('#loading').hide();
});

点击按钮触发事件

$('#btnUpload').on('click', function() {var files = $('#file1')[0].files;if (files.length <= 0) {return alert('请选择文件再上传');}var fd = new FormData();fd.append('avatar', files[0]);//...发起请求代码
});

axios

Axios是专注于网络数据请求的库,相对于原生的XMLHttpRequest对象,axios简单易用,相对于jQuery更加轻量化,只专注于网络数据请求

axios发起GET请求

语法:

axios.get('url',{params:{/*参数*/} }).then(callback)

示例:

<button id="btn1">发起GET请求</button><script>document.querySelector('#btn1').addEventListener('click', function() {//请求的 URL 地址var url = 'http://www.liulongbin.top:3006/api/get';//请求的参数对象var paramsObj = {name: 'zs',age: 20}//调用 axios.get() 发起 GET 请求axios.get(url, {params: paramsObj}).then(function(res) {//res是axios封装的对象 里面的data属性才是服务器返回的数据 所有用res.dataconsole.log(res.data);})})</script>

axios发起POST请求

语法:

axios.get('url',{/*参数*/}).then(callback)

示例:

<button id="btn2">发起POST请求</button>
document.querySelector('#btn2').addEventListener('click', function() {var url = 'http://www.liulongbin.top:3006/api/post';var dataObj = {address: '北京',location: '顺义区'}axios.post(url, dataObj).then(function(res) {console.log(res.data);})
})

直接使用axios发起请求

语法:

axios({ method:'请求类型', url:'请求的URL地址', data:{/*POST数据*/}, params:{/*GET参数*/} 
}).then(callback)


http://www.ppmy.cn/news/139438.html

相关文章

信号处理中简单实用的方法——数据的延拓

数字滤波器的输出有瞬态效应&#xff0c;即当取有限长的信号时对信号的截断&#xff0c;会使输出信号的前端产生失真&#xff1b;当通过零相位滤波器时&#xff0c;由于信号通过滤波器二次&#xff0c;会使输出信号的两端都产生失真。有些文献报道为改善滤波器输出的失真&#…

深度学习从入门到精通——图像分割技术原理解析

图像分割技术原理解析 图像分割模型全卷积网络&#xff08;FCN&#xff09;UNet显著性目标检测/图像分割 U2netSegNet现在的图像分割技术常用 常用损失函数损失函数精度描述像素准确率&#xff08;Pixel Accuracy&#xff09;平均像素准确率&#xff08;Mean Pixel Accuracy&am…

HyperLynx(九)HDMI仿真实例

1.眼图和眼图模板 2.HDMI眼图模板 3.在HyperLynx中设置眼图模板 4.HDMI仿真 5.HDMI设计规则总结 1.眼图和眼图模板 眼图是指一系列的数字信号在示波器或图形软件中显示的图形。简单地说就是把一连串 接收端接收到 的脉冲信号(000&#xff0c;001&#xff0c;010&#xff0c; …

红外成像和可见光---双光集成设备的介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、HX1 视觉模组二、HX1-S0&#xff08;M&#xff09; 双光模组 前言 红外成像技术越来越多的应用在我们的研发、制造、维护&#xff0c;甚至生活中。红外光谱…

PDF电子发票内容提取

可以点击这里使用发票提取软件&#xff1a;发票解析 请参考最新的实现方案&#xff1a; 浅谈电子发票识别方案 在线使用&#xff1a;发票提取 摘要 本文介绍如何提取PDF版电子发票的内容。 1. 加载内容 首先使用Python的pdfplumber库读入内容。 FILEr"data/test-2.…

HiXray

Towards Real-world X-ray Security Inspection: A High-Quality Benchmark And Lateral Inhibition Module For Prohibited Items Detection 论文&#xff1a;https://arxiv.org/pdf/2108.09917.pdf 代码&#xff1a;https://github.com/HiXray-author/HiXray 摘要 X射线图…

YOLO算法入门知识概念

1.two-stage && one-stage two-stage(两阶段)&#xff1a;Faster-rcnn,Mask-Rcnn系列&#xff08;5EPS&#xff09;---多了预选环节 one-stage(单阶段)&#xff1a;YOLO系列&#xff08;速度快&#xff09;---实时检测时常用2.Map指标&#xff1a;综合衡量控制效果 包…

Prosys OPC UA Simulation Server 的下载和安装

下载地址&#xff1a; https://download.csdn.net/download/v6543210/85349696 安装方法&#xff1a; Installing Windows On Windows, run the installer executable prosys-opc-ua-simulation-server-windows-x64-5.4.6-148.exe and follow the instructions. By default,…