备赛记录-2

为了预防比赛现场出现意料之外的情况,能做的就是尽可能准备周全,所以尝试了很多数据请求的方式,在这里集中记录一下

更新ing

数据请求主要用的是axios和ajax

XHR (XMLHttpRequest) 基于XML的HTTP请求。XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。

AJAX (Asynchronous JavaScript And XML)异步的JS和XML。原生XHR的封装,优势:AJAX 允许只更新一个 HTML 页面的部分 DOM,而无须重新加载整个页面。AJAX 还允许异步工作,这意味着当网页的一部分正试图重新加载时,你的代码可以继续运行(相比之下,同步会阻止代码继续运行,直到这部分的网页完成重新加载)。

AXIOS AJAX的封装,基于promise 的网络请求库,可以用于浏览器和 node.js,功能比ajax更丰富,更好用

AJAX

使用Javascript向服务器提出请求并处理响应而不阻塞用户!核心对象XMLHTTPRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与Web服务器交换数据。不需要额外的操作,原生js就可以使用AJAX

XMLHttpRequest对象具体属性方法参考MDN WEB Docs

AJAX 基本数据请求

        // 事件绑定
        btn.onclick = function () {
            // 创建对象
            const xhr = new XMLHttpRequest();
            // 初始化
            // method:用于指定请求类型"GET"或"POST"
            // url:请求地址,绝对路径或相对路径
            // asyncFlag:请求方式,true为异步,false为同步
            xhr.open('GET', 'http://localhost:3000/test',true)
            // 发送
            xhr.send();
            // 事件绑定。处理服务端返回结果
            // readystate是xhrr对象中的属性,表示状态:0  1  2  3  4
            xhr.onreadystatechange = function () {
                // 判断服务端返回了所有的结果
                if (xhr.readyState === 4) {
                    // 判断响应状态码,2xx表示成功
                    if (xhr.status >= 200 && xhr.status < 300) {
                        // 处理结果
                        console.log(xhr.status);// 状态码
                        console.log(xhr.statusText);// 状态码字符串
                        console.log(xhr.getAllResponseHeaders);// 所有响应头
                        console.log(xhr.response);// 响应体
                    }
                }
            }
        }

AXIOS

Axios 是 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。使用需要引入或者npm下载

引入标签:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

npm下载:

npm install axios
// 文件内
import axios from "axios";

Axios 基本使用

Axios返回的对象是一个Promise

        // 事件绑定
        btn.onclick = function () {
            // 简单的获取数据
            // 返回的是一个Promise对象
            const res = axios.get("http://localhost:3000/test");
            console.log(res);

            const res2 = axios.get("http://localhost:3000/test")
                .then(function (response) {
                    // 成功时返回
                    console.log(response);
                }).catch(function (error) {
                    // 失败时返回
                    console.log(error.response.data);         // 数据
                    console.log(error.response.status);        // 状态码
                    console.log(error.response.headers);    // 服务器响应头
                }).finally(function () {
                    // 无论失败or成功都是会返回
                })

        }

请求响应结构

{
  // `data` 由服务器提供的响应(数据)
  data: {},
  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,
  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: 'OK',
  // `headers` 是服务器响应头
  // 所有的 header 名称都是小写,而且可以使用方括号语法访问
  // 例如: `response.headers['content-type']`
  headers: {},
  // `config` 是 `axios` 请求的配置信息
  config: {},
  // `request` 是生成此响应的请求
  // 在node.js中它是最后一个ClientRequest实例 (in redirects),
  // 在浏览器中则是 XMLHttpRequest 实例
  request: {}
}

请求配置,详情参考:MDN WEB Docs

        // 事件绑定
        btn.onclick = function () {

            const res = axios({
                // 服务器URL,唯一的必填配置
                url: 'http://localhost:3000/test',
                // 创建请求时使用的方法,默认值get
                method: 'get',
                // 作为请求体被发送出去的数据,仅适用'PUT','POST','DELETE','PATCH'请求方法
                data: {
                    body: 'test'
                },
                // 请求超时的毫秒数,如果请求时间超过timeout的值,则请求中断。默认值0,永不中断
                timeout: 1000,
                // 代理服务商的主机名,端口,和协议
                proxy: {
                    protocol: 'http',
                    host: '127.0.0.1',
                    port: 9000,
                    auth: {
                        username: 'mikeymike',
                        password: 'rapunz3l'
                    }
                },
            })

        }
最后修改:2023 年 12 月 01 日
如果觉得我的文章对你有用,请随意赞赏