博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用axios请求,前端数字long类型精度问题解决方法
阅读量:4118 次
发布时间:2019-05-25

本文共 1234 字,大约阅读时间需要 4 分钟。

今天开发遇到个问题,服务器后端的Long类型数据,传到前端会出现精度丢失,如:164379764419858435,前端会变成164379764419858430。

在浏览器中做测试可知,这就是一个精度丢失的问题。

前端使用的axios来发起请求的,最开始以为是浏览器的问题,但是通过postman来请求是没问题,打开浏览器开发工具,在xhr下的response响应中也是没问题的,代表是请求成功后数据格式化出问题了,下面讲解下各种解决方案。

出现原因

后台数据库定义的bigint类型(对应Long)的值太长会导致传递给前端的时候精度丢失,其原因是后端语言和js对字节码的解析长度不一样。

前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度。

方案一:

前端引入 json-bigint

yarn add json-bigint或npm install json-bigint

在axios封装的地方,transformResponse 在传递给 then/catch 前,允许修改响应数据。

export const list = (data) => {    return request({        url: baseUrl + '/fly63/api/list',        method: 'post',        params: data,        transformResponse: [ data => {            data = JSONbig.parse(data);            data.list.filter((item)=>{                item.id = item.id.toString();                return item;            })            return data;        }],    })}

方案二:

修改axios的源码,在node_modules/axios/lib/default.js中找到transformResponse 将其内容改为

transformResponse: [function transformResponse(data) {    /*eslint no-param-reassign:0*/    if (typeof data === 'string') {      try {        data = JSON.parse(data);      } catch (e) { /* Ignore */ }    }    return data;  }],

方案三:

后台传到前台时,Long类型数据,转为String类型。可以直接操作传回的对象数据,toString()该long类型数据。(推荐)

学习更多技能

请点击下方公众号

转载地址:http://bwdpi.baihongyu.com/

你可能感兴趣的文章
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>
服务器端技术----Http请求的处理过程
查看>>
C语言-预处理指令2-条件编译
查看>>
C语言-预处理指令3-文件包含
查看>>
C语言-变量类型
查看>>
C语言-static和extern关键字1-对函数的作用
查看>>
C 语言-static和extern关键字2-对变量的作用
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
还不会正则表达式?看这篇!
查看>>