账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue3项目 axios 报异常,但浏览器 network 中已获取数据,有源码可测
    75
    0
    项目源码我在 github 上找到个 vue3 项目,仓库地址是:https://github.com/cool-team-...。想要在这个项目基础上自己做些定制,自己的仓库地址是(gitee - 码云):https://gitee.com/chanchaw/er... 。注意使用 dev 分支。测试从码云下载我的源码后通过命令:yarn 安装依赖,然后使用 npm run serve 启动项目。启动后访问地址:http://127.0.0.1:9000。登录页面上在按钮“登录”下面有个按钮“当前模式”,点击后会请求我自己开发的 springboot 后台服务:billType/selectAll 获取一个表的所有数据。此时查看浏览器的控制台会出现 http 请求报异常:请求 billType 出现异常: undefined ,但是切换到网络页面看到状态码是 200.并且有数据成功返回。线索登录页面源码文件:src\cool\modules\base\pages\login\index.vue 在行号128 执行了请求请求的具体地址是源码 src\cool\modules\base\service\open.ts 的行号5问题请帮忙解释为什么控制台中报出异常,但是网络页面能显示 200 并且收到了数据
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 劳资女王范 普通会员 1楼

      在 Vue 3 中,axios 发送请求时会遇到一些异常,如请求超时、请求头异常、请求体异常等,但浏览器网络会返回数据。下面是一个可能的解决方案,说明了在 Axios 发送请求并获取数据时遇到异常的情况,以及如何通过网络查看数据的源码。

      1. 异常发生时,Vue.js 在进行网络请求前会触发 beforeSend 方法。在这个方法中,我们可以获取到当前的 xhr 对象,包括 statusstatusTextresponseTextresponseXML 等信息,以及 networkErrorloadEvent 等状态信息。

      javascript axios.get('https://api.example.com/data') .then(response => { console.log('Before sending request:', response); // 在这里获取 axios 的 state、headers 等信息 // ... }) .catch(error => { console.error('Error during network request:', error); // 在这里获取 axios 的 state、headers 等信息 // ... });

      1. 在网络请求成功后,我们可以使用 networkResponse 对象来查看请求的响应状态和数据。networkResponse 对象包含了请求的详细信息,包括响应的状态码(如 200、404 等)、响应的 body(如果有的话)、响应头(如 Access-Control-Allow-Origin 等)、响应体(如果有的话)等。

      javascript axios.get('https://api.example.com/data') .then(response => { console.log('Response:', response); // 从响应体中获取数据 // ... }) .catch(error => { console.error('Error during network request:', error); // 从响应头中获取数据 // ... });

      1. 在获取数据后,我们通常会使用 response.dataresponse.data.json() 方法来将响应体转换为 JSON 字符串。这个方法将响应体中的数据解析为 JavaScript 对象,我们可以通过这个对象访问到请求的数据。

      javascript axios.get('https://api.example.com/data') .then(response => { console.log('Response:', response.data); // 使用 response.data 来获取数据 // ... }) .catch(error => { console.error('Error during network request:', error); // 使用 response.data 来获取数据 // ... });

      1. 如果在发送请求和获取数据过程中遇到异常,可能是因为网络连接问题、数据格式不正确、请求头或者请求体的编码不匹配等原因。为了解决这个问题,我们可以检查网络连接的状态,如检查网络是否已连接、检查响应头中的 Content-Type 是否正确等。此外,我们还可以检查请求体中的数据是否符合预期的格式,例如检查 JSON 数据是否符合 JSON 文档的格式等。

      javascript axios.get('https://api.example.com/data') .then(response => { console.log('Response:', response.data); // 检查网络连接状态 if (!response.ok) { throw new Error('Network request failed: ' + response.statusText); } // 检查响应头中的 Content-Type if (!response.headers.get('Content-Type')) { throw new Error('Content-Type header is missing'); } // 检查请求体中的数据格式 if (!response.data instanceof JSON) { throw new Error('Data format is incorrect'); } // 将数据转换为 JSON 字符串 const data = JSON.parse(response.data); // ... }) .catch(error => { console.error('Error during network request:', error); // 检查网络连接状态 if (!response.ok) { throw new Error('Network request failed: ' + response.statusText); } // 检查响应头中的 Content-Type if (!response.headers.get('Content-Type')) { throw new Error('Content-Type header is missing'); } // 检查请求体中的数据格式 if (!response.data instanceof JSON) { throw new Error('Data format is incorrect'); } // 将数据转换为 JSON 字符串 const data = JSON.parse(response.data); // ... });

      注意:在处理网络请求时,需要根据具体的项目需求和服务器响应的格式进行适当的转换和验证。以上代码仅为示例,实际的代码可能需要根据项目的具体需求进行调整。例如,如果你需要解析 JSON 数据,可能需要使用第三方库如 axios-promiseaxios-to-json,而不是直接从响应体中解析数据。如果你需要解析 JSON 数据的特定格式,可能需要在请求头中指定适当的格式信息。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部