XMLHttpRequest原生,xhr发送接口请求

接口

使用原生发送接口请求,获取请求进度–POST

下载压缩包

// 创建一个新的 XMLHttpRequest 对象
    var xhr = new XMLHttpRequest();

    // 初始化请求
    xhr.open('POST', `http://0.0.0.1`, true);
    xhr.responseType = 'blob';
    // 设置请求头(如果需要)
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.setRequestHeader('Authorization', 写token);

    // 定义请求完成时的回调函数
    xhr.onload = function () {
      if (xhr.status === 200) {
        if (window.navigator.msSaveOrOpenBlob) {
          navigator.msSaveBlob(xhr.response, filename);
        } else {
          const link = document.createElement('a'); // 生成一个a元素
          let event = new MouseEvent('click'); // 创建一个单击事件
          link.download = filename;

          console.log('download', xhr.response);
          link.href = window.URL.createObjectURL(xhr.response); // 将生成的URL设置为a.href属性
          link.dispatchEvent(event); // 触发a的单击事件
          window.URL.revokeObjectURL(link.href);
        }
      }
    };

    // 定义错误处理函数
    xhr.onerror = function () {
      console.error('请求错误');
      setLoading(false);
    };

    // 定义请求进度处理函数(可选)
    xhr.onprogress = function (event) {
      if (event.lengthComputable) {
        setLoading(false);
        var percentComplete = (event.loaded / event.total) * 100;
        setProgressData(percentComplete, 0, 1);
        console.log('进度:', percentComplete + '%');
      }
    };

    // 发送请求,并传递请求体数据
    xhr.send(JSON.stringify(data));
    // 调用send()函数,同时将数据以查询字符串的形式,提交给服务器
    xhr.send('bookname=水浒传&author=施耐庵&publisher=天津图书出版社')

GET

// 带两个参数的 URL 地址
    xhr.open('GET', `http://0.0.0.1?id=1&bookname=西游记`, true);
// 或调用send()函数,同时将数据以查询字符串的形式,提交给服务器
    xhr.send('bookname=水浒传&author=施耐庵&publisher=天津图书出版社')

获取请求进度

   // 定义请求进度处理函数(可选)
    xhr.onprogress = function (event) {
      if (event.lengthComputable) {
        setLoading(false);
        var percentComplete = (event.loaded / event.total) * 100;
        setProgressData(percentComplete, 0, 1);
        console.log('进度:', percentComplete + '%');
      }
    };
### 如何在原生 XMLHttpRequest (XHR) 请求中加入 Token 实现授权认证 为了实现通过 `XMLHttpRequest` 添加 Token 来完成身份验证,可以在发送请求之前设置 HTTP 头部字段中的 `Authorization` 属性。以下是具体的方法: #### 设置 Authorization Header 当创建并打开一个 XHR 对象之后,在调用 `.send()` 方法之前,可以使用 `.setRequestHeader(key, value)` 方法来定义自定义头部信息。对于身份验证而言,通常会将 Bearer Token 放置到 `Authorization` 字段下。 ```javascript var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com/api/data", true); // 定义 token 值 var token = "your-access-token-here"; // 使用 setRequestHeader 方法添加 authorization header xhr.setRequestHeader('Authorization', 'Bearer ' + token); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send(); ``` 上述代码片段展示了如何向服务器发起 GET 请求的同时传递访问令牌作为身份验证的一部分[^2]。 需要注意的是,确保每次请求都正确设置了相应的 token,并妥善管理这些敏感数据的安全存储与传输过程。 此外,如果项目中有多个地方需要用到类似的逻辑,则考虑封装此功能成通用函数或者类以便重用和维护更加方便高效。 --- ### 关于 fetch API 和 vue-resource 的对比补充说明 虽然现代开发更倾向于采用 Fetch API 或 Axios 替代传统 XHR 方式来进行网络交互操作,但是理解原始方式仍然具有重要意义因为它构成了其他更高层次库的基础原理之一。相比之下,Fetch 提供了一个更为简洁明了的接口用于执行同样的任务;而像 Vue Resource 这样的框架特定工具则进一步简化了流程并且集成了额外特性例如拦截器机制等[^3]。 尽管如此,在实际应用当中无论选用哪种技术方案都需要遵循最佳实践原则——即始终保护好用户的隐私资料不被泄露出去! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值