JavaScript对返回的http包数据类型的判断
2025-02-18 18:13:34

遇到一个后端使用雪花ID,返回ID给前端时,前端解析的ID与Http包的内容不一致的问题。

经过排查,可以看到结果的类型被Javascript解析成了number。

1
2
3
4
5
6
7
8
9
10
11
12
//两条log记录
Save Response:
Object { data: 1891767091295240200, status: 200, statusText: "OK", headers: {…}, config: {…}, request: XMLHttpRequest }
config: Object { url: "/api/books", method: "post", data: '{"name":"sdassssss","author":"","isbn":"","publishDate":"2025-02-18 16:29:46","category":"","introduction":"","total":"","stock":"","imageUrl":"","id":""}', … }
data: 1891767091295240200
headers: Object { "cache-control": "no-cache, no-store, max-age=0, must-revalidate", connection: "close", "content-length": "19", … }
request: XMLHttpRequest { readyState: 4, timeout: 100000, withCredentials: true, … }
status: 200
statusText: "OK"
<prototype>: Object { … }

Data Type: Number

原因是,因为data里只有数字字符,使用Json.parse解析会自动解析成Number类型。而雪花ID是64位的长整数,超出了Javascript的安全整数范围(其安全整数范围是-2^53 + 12^53 - 1),解析成Number类型时就可能会出错。

将整个对象返回,而不仅仅是返回一串数字字符就可以初步解决这个问题。

上一页
2025-02-18 18:13:34
下一页