• XHR level2的新功能


    设置HTTP请求的时限

    xhr.timeout=3000;

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

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

    设置FormData对象管理表单数据

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

    直接获取form表单中的数据

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

    上传文件

    1、定义UI结构


    2、验证是否选择了文件

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

    3、向FormData 中追加文件

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

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

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

    5、监听 onreadystatechange事件

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

    获取数据传输的进度信息

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

    监听上传完成的事件

    xhr.upload.onload = function() {}

    使用jquery上传文件

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

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

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

    jQuery实现loading效果

    ajaxStart(callback)

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

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

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

    ajaxStop(callback)

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

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

    点击按钮触发事件

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

    axios

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

    axios发起GET请求

    语法:

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

    示例:

    1. <script>
    2. document.querySelector('#btn1').addEventListener('click', function() {
    3. //请求的 URL 地址
    4. var url = 'http://www.liulongbin.top:3006/api/get';
    5. //请求的参数对象
    6. var paramsObj = {
    7. name: 'zs',
    8. age: 20
    9. }
    10. //调用 axios.get() 发起 GET 请求
    11. axios.get(url, {
    12. params: paramsObj
    13. }).then(function(res) {
    14. //res是axios封装的对象 里面的data属性才是服务器返回的数据 所有用res.data
    15. console.log(res.data);
    16. })
    17. })
    18. script>

    axios发起POST请求

    语法:

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

    示例:

    1. document.querySelector('#btn2').addEventListener('click', function() {
    2. var url = 'http://www.liulongbin.top:3006/api/post';
    3. var dataObj = {
    4. address: '北京',
    5. location: '顺义区'
    6. }
    7. axios.post(url, dataObj).then(function(res) {
    8. console.log(res.data);
    9. })
    10. })

    直接使用axios发起请求

    语法:

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

  • 相关阅读:
    mysqld_multi测试
    Java_常用API
    vue-cli3 vue项目 动态修改favicon.ico(浏览器顶部小图标)
    Python之正则表达式
    领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进
    【魔方代码】1200行C语言代码实现“魔方”程序,学会它买魔方的钱都省了,拿走不谢~
    代码随想录算法训练营第四十六天| 完全背包、518.零钱兑换 II 、377.组合总和 Ⅳ
    「企企通」完成Pre-D轮融资,加速采购供应链工业软件和 SaaS 网络生态构建
    项目质量管理
    拥抱 Spring 全新 OAuth 解决方案
  • 原文地址:https://blog.csdn.net/MoYuP_ENG/article/details/127103225