您现在的位置是:休闲 >>正文

js获取后端数据

休闲883人已围观

简介打开浏览器控制台,敲下 fetch('/api/user'),回车。如果后端接口正常,你会在 Network 面板里看到一条请求飞出去又飞回来,Promise 对象从 pending 变成 fulfi ...

打开浏览器控制台,获取后端敲下 fetch('/api/user'),数据回车。获取后端如果后端接口正常,数据你会在 Network 面板里看到一条请求飞出去又飞回来,获取后端Promise 对象从 pending 变成 fulfilled,数据数据安安静静躺在 response 里。获取后端就这么简单,数据也这么容易踩坑。获取后端

我见过太多人卡在第一步:跨域。数据前端跑在 localhost:3000,获取后端后端在 localhost:8080,数据浏览器直接甩你一个 CORS 错误,获取后端红得刺眼。数据这不是获取后端 JS 的问题,是浏览器安全策略在拦你。解决办法要么后端加 Access-Control-Allow-Origin 头,要么前端配代理。我一般选后者,webpack 的 devServer.proxy 或者 vite 的 server.proxy 配一行,请求从 3000 发出去,代理帮你转到 8080,浏览器以为同源,放行。

跨域过了,接下来是 fetch 的坑。它跟 jQuery 的 $.ajax 不一样,fetch 不会因为 HTTP 状态码是 404 或 500 就 reject。只有网络故障才触发 catch。所以你得手动检查 response.ok,不然 404 页面返回的 HTML 会被你当 JSON 解析,然后报一个莫名其妙的语法错误。我习惯这么写:

fetch('/api/data') .then(res => {  if (!res.ok) throw new Error(`HTTP ${ res.status}`); return res.json(); }) .then(data => console.log(data)) .catch(err => console.error('请求失败:', err)); 

够用,但不够顺手。实际项目里我会包一层 request 函数,统一处理 baseURL、超时、token 注入和错误提示。比如用 AbortController 做超时:

function request(url, options = { }, timeout = 10000) {  const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeout); return fetch(url, {  ...options, signal: controller.signal }) .finally(() => clearTimeout(timer)); } 

这样请求超过十秒自动断开,不会让用户对着转圈图标干等。AbortController 还能用来取消重复请求——搜索框输入时每次按键都发请求,旧请求没回来新请求又出去,结果顺序乱了。用 AbortController 把上一个掐掉,只保留最后一次。

axios 在国内用得更普遍,不是没道理。它自动把 JSON 转成对象,拦截器能统一加 loading 和错误处理,超时配置也直观。但 fetch 是原生 API,不依赖第三方库,体积小,Service Worker 里也能用。选哪个看场景,别为了用而用。我自己的小工具用 fetch,公司项目用 axios,就这么简单。

拿到数据之后才是真正的麻烦。后端返回的字段名可能是 user_name,前端习惯 userName,手动映射容易漏。我现在的做法是让后端直接返回 camelCase,改不了就在前端加一层 normalize 函数,集中处理字段转换。别在组件里到处写 data.user_name,改起来想死。

还有一个细节:response.json() 只能调用一次。因为它是流,读完了就没了。如果你先 response.text() 再 response.json(),第二个会报错。调试的时候可以先 clone 一份:const clone = response.clone(),一个用来打日志,一个用来解析。

最后说个真事。上周帮同事排查一个 bug,接口返回的数据在 Chrome 里正常,在 Safari 里字段全是 undefined。查了半天发现后端返回的 JSON 里有 NaN,Chrome 的 JSON.parse 容忍了,Safari 直接抛错。后来让后端把 NaN 转成 null 才解决。浏览器差异这种事,文档不会写,踩过一次就记住了。

获取后端数据这事,核心就三句话:请求发出去,响应接回来,错误处理好。剩下的都是细节堆出来的经验。

Tags:

相关文章

  • 知乎怎么快速升到4级

    休闲

    知乎怎么快速升到4级 别信那些“坚持优质回答就行”的废话。我实测过,纯靠写长文,一天写三篇千字回答,连续两周,等级纹丝不动卡在3级半。后来我摸到门道,4级其实是个分水岭——它卡的不是内容质量,是**活 ...

    【休闲】

    阅读更多
  • 小学生安全教育网站

    休闲

    下午四点半,某小学门口。一个背着奥特曼书包的二年级男孩站在路边,盯着手机屏幕里的游戏,脚已经迈出人行道半步。一辆电动车擦着他的衣角冲过去,车主骂了一句,男孩抬头,一脸茫然。这是上周我在校门口亲眼看到的 ...

    【休闲】

    阅读更多
  • IIS短文件名泄露漏洞

    休闲

    2017年,安全研究员在一台运行着IIS 6.0的老旧服务器上,仅凭一个8.3短文件名就撬开了整个站点的目录结构。那次渗透测试,对方是个政府遗留系统,补丁打了三年没重启过。攻击者输入 /*~1*/.a ...

    【休闲】

    阅读更多


友情链接