FortiSandbox 返回一个值,jQuery 在 console.log() 时更改该值

问题描述 投票:0回答:1

我从 FortiSandbox API 收到一个 json 响应,我可以在网络选项卡中看到从 API 返回的值是 6994689367114128661,但是当我使用它发送它或到 console.log() 时值更改为 6994689367114128000

收到服务器的响应后,我立即控制台。记录了该值,它发生了变化。

我的 jQuery 代码

  fetch(apiUrl, requestOptionsJobID)
        .then(responsegetJobStatus => {
            if (!responsegetJobStatus.ok) {
                throw new Error('Network response was not ok');
            }
            return responsegetJobStatus.json();
        })
        .then(getJobIDResult => {
            var ok = getJobIDResult.result.status.message;
            if (ok == 'OK') {
                var getJobJid = getJobIDResult.result.data.jids[0];//here is where the value changes to 6994689367114128000
                console.log(getJobJid);//shows the changed value
            }
            return getJobIDResult;
        }).catch(error => {
        console.error('Eroare get job ID: ', error);
    });

来自 API 的具有所需 jid 值的 API 响应

{
    "id": 17,
    "ver": "2.0",
    "result": {
        "url": "/scan/result/get-jobs-of-submission",
        "status": {
            "code": 0,
            "message": "OK"
        },
        "data": {
            "jids": [
                6994689367114128661
            ],
            "total_jids": 1
        }
    }
}
jquery json api response console.log
1个回答
0
投票

发生的情况是您收到的数字太大,无法由 JavaScript 完全处理。当接收到更大的数字时,它会失去精度。无需详细说明,这里有一个简单的示例:

假设 Javascript 只能“记住”10 位数字。它可以轻松处理 235 或 1,235,038 等数字,但不能处理 123,123,456,456,因为它有 12 位数字。为了保持一定的准确性,javascript将只取前10位数字并记住它丢弃了多少个数字:1,231,234,564,因为它去掉了2位数字(将数字除以100、10^2或e2),它能够显示数字仍然如此,但只有 10 个最大的数字才是准确的,所以结果会是这样的:1,231,234,564e2 = 123,123,456,400

这正是您所经历的。 Number.MAX_SAFE_INTEGER 值给出了 Javascript 可以精确处理的最大数字。超过这个值,它将开始失去精度。在下面的 console.log 中,您可以看到最大的安全整数,然后比较您的数字是否大于它,然后再次看到 Javascript 看到的数字。

console.log(Number.MAX_SAFE_INTEGER, 6994689367114128661 > Number.MAX_SAFE_INTEGER, 6994689367114128661);

那么现在我们该如何解决这个问题呢?最好的办法是将 JSON 数字转换为字符串。您将使用 .text() 方法而不是 JSON 并操作文本以引用其中的数字。然后解析 JSON 会将 ID 处理为字符串而不是数字,因为字符串的处理方式与数字完全不同,因此您将保留与收到的值相同的值。

请参阅将 JSON 中的大数字解析为字符串

© www.soinside.com 2019 - 2024. All rights reserved.