首页 > 其他分享 >原生 js 中 XMLHttpRequest

原生 js 中 XMLHttpRequest

时间:2023-02-03 19:33:47浏览次数:58  
标签:原生 files XMLHttpRequest 请求 js xhr var open

完整文档

使用 XMLHttpRequest 对象的 open() 方法来初始化一个请求,open() 方法的语法格式如下:

XMLHttpRequest.open(method, url, async, user, password);
参数说明如下:
method:请求的类型(使用的 HTTP 方法),例如 GET、POST、PUT、HEAD、DELETE 等;
url:请求的地址;
async:可选参数,布尔类型,表示是否请求是否异步执行,默认值为 true;
user:可选参数,表示用户名,主要用来认证,默认值为 null;
password:可选参数,表示密码,同样用来认证,默认值为 null。

XMLHttpRequest  写法

1、new XMLHttpRequest();
2、上传进度
3、open()
4、设置header
5、post 方式组装数据
6、send()

get 方法

function jsGetRequest() {
    var url = "http://casphp.com/api/AjaxRequest/jsAjaxGet";
    var canshu="id=11&name=jsGetRequest1&char=中文数据";
    canshu+='&'+document.cookie;  
    //实例化一个 XMLHttpRequest 对象
    let xhr = new XMLHttpRequest();
    xhr.open('GET', url+'?'+canshu); //设置请求方式及接口地址
    xhr.setRequestHeader("Authorization","token_value");  //设置请求头认证
    //xml.setRequestHeader("Cookie","cookiename=value");
    xhr.withCredentials = true; //一个布尔值,用来指定跨域 Access-Control 请求是否应带有授权信息,如 cookie 或授权 header 头。
   // xhr.responseType='json';// 请求所期待返回的数据类型
    xhr.send();
    xhr.onreadystatechange = (e) => {  //服务端响应后
        /*
        0 未打开,xhr.open()方法还未被调用.
        1 未发送, xhr.send()方法还未被调用.
        2 已获取响应头,xhr.send()方法已经被调用, 响应头和响应状态已经返回.
        3 正在下载响应体, xhr.响应体下载中; responseText中已经获取了部分数据.
        4 请求完成, 整个请求过程已经完毕.
        * */
        if (xhr.readyState == 4) {  //判断客户端是否可以使用
            if(xhr.status == 200){    //表示成功处理请求
                // 如果定义为  xhr.responseType='json';,控制台包提示格式错误,建议不设置,使用默认设置
                console.log(xhr.responseText)
            }else{
                console.log(xhr.status+' '+xhr.statusText)
            }
        }
    }
}

post 方法

html

<!--上传单个、多个文件-->
<input type="file" multiple  id="filess">
<button onclick="jsPostRequest5()">上传多个文件ss</button>
<p id="filess_progress"></p> 

js

function jsPostRequest5() {
        var url = "http://casphp.com/api/AjaxRequest/jsAjaxPost3";

        //实例化一个 XMLHttpRequest 对象
        let xhr = new XMLHttpRequest();

        // 这个要放到调用open函数之前!!!
        xhr.upload.onprogress = function (e) {
            //  e.lengthComputable 是一个布尔值,表示当前上传的资源是否具有可计算的长度
            if (e.lengthComputable) {
                // 多个文件总共大小,以及已上传大小
                console.log(e.total,e.loaded);
                // e.loaded 已传输的字节  e.total 文件传输需要的总字节
                var percentComplete = Math.ceil((e.loaded / e.total) * 100); // Math.ceil() 向上取整
                var progress=document.getElementById('filess_progress');
                progress.style.width=percentComplete+'px';
                progress.innerHTML=percentComplete+'%'
            }
        };
        // 文件上传成功
        xhr.upload.onload = function () {
            console.log('文件上传完成')
        };

        // open 必须放 xhr.send() 前面
        xhr.open('POST', url); //设置请求方式及接口地址

        // 设置请求头认证,必须方法 open 后面
        xhr.setRequestHeader("Authorization",'token_value');
        xhr.withCredentials = true; //一个布尔值,用来指定跨域 Access-Control 请求是否应带有授权信息,如 cookie 或授权 header 头。
        //xml.setRequestHeader("Cookie",'cookiename=value');

        // formdata 方式传递参数数据
        var formData = new FormData();
        formData.append('id', 2);
        formData.append('name', 'jsPostRequest2');
        formData.append('extra', 'formdata 方式传递参数数据');

        var files=document.getElementById('filess').files;
        // 如果直接写 formData.append("server_files", files); 后端接收不到 server_files
        for (var i = 0; i < files.length; i++) {
            formData.append("files["+i+"]", files[i]);
        }

        xhr.onreadystatechange = (e) => {  //服务端响应后
            if (xhr.readyState == 4) {  //判断客户端是否可以使用
                if(xhr.status == 200){    //表示成功处理请求
                    console.log(xhr.responseText)
                }else{
                    console.log(xhr.status+' '+xhr.statusText)
                }
            }
        };
     // 如果不上传文件,可以使用字符串方式传参
     // xhr.send("id=12&name=字符串方式传参");

        xhr.send(formData);
    }

 

标签:原生,files,XMLHttpRequest,请求,js,xhr,var,open
From: https://www.cnblogs.com/xuey/p/17090272.html

相关文章

  • js中数组对象排序
    //数组对象按照指定属性排序--冒泡写法constduplicateRemovalBubbling=function(oldArr,key){for(leti=0;i<oldArr.length;i++){for(letj=0;j<oldArr.length......
  • python-json的自定义编码器与自定义解码器
    json的数据类型有限,在实际业务中可能会遇到数据无法使用JSON编码的问题。如果我们需要转发的数据有大量或位置不规则的json无法解析数据类型时,事先处理就变成了一件比较麻......
  • JS数组的常用方法-常用篇
     1.join数组变成字符串   不改变原数组1letarr1=['I','Love','You']2console.log(arr1.join(),arr1);//I,Love,You,['I','Love','You']3......
  • js中toFixed 并不是你想的那样进行四舍五入
    toFixed的简单介绍toFixed()方法可把Number类型的数字通过四舍五入为指定小数位的字符串。(将数字类型转化为字符串类型)也就是说toFixed只能够处理数字类型的.字符......
  • js:定时器setInterval、clearInterval的使用
    定时器:可以在固定时间间隔,重复调用一个函数文档https://developer.mozilla.org/zh-CN/docs/Web/API/setInterval常用的语法//设置定时器varintervalID=setInterv......
  • js: Math.random()获取随机数
    文档https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/random获取一个0-1之间的随机数//[0,1)console.log(Math.random())......
  • 《Vue.js 设计与实现》读书笔记 - 第8章、挂载与更新
    第8章、挂载与更新8.1挂载子节点和元素的属性扩展子元素的类型可以为数组,并判断如果是数组的话,就先依次挂载所有的子元素。同时新增节点属性。属性可以通过el.setAttr......
  • js浏览器录音功能
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-......
  • JS判断数据类型
    1:typeof只能判断基本数据类型数字,字符串、布尔复杂数据类型都是object1console.log(typeof"123");//string2console.log(typeof{});//object3console.lo......
  • vue.js客服系统实时聊天项目开发(十八)仿淘宝商品页面点在线客服传递产品卡片
    我们在使用淘宝的时候,在商品页面点击在线客服,跳转到客服聊天页以后,会浮动出当前产品信息,可以把产品信息发给客服现在我们也实现了类似功能,可以带着产品信息进聊天页面 ......