我正在使用angular来对我自己的REST API进行AJAX调用。
$scope.authenticate = function() {
$http({
headers: httpHeaders,
url: '/something/',
method: "POST",
data: { 'userId' : $scope.userId, 'password': $scope.password },
cache: false
})
.success(function(response, status) {
console.log(response);
var ourstring = JSON.stringify(response);
console.log(ourstring);
$scope.authenticate_data = response;
$scope.sessionId = response.sessionId;
$scope.cookie = response.cookie;
$scope.message = "You have successfully authenticated."
});
}
不知何故,angular不正确地解析整数,并且在Chrome检查器的网络选项卡中,调用显示以下内容:
请求选项卡
{"sessionId": 115053508782199126, "cookie": "JSESSIONID=E61DD3443AE9E119060A637CF039936B; Path=/webservice"}
预览标签(存储在范围内的值)
{"sessionId":115053508782199120,"cookie":"JSESSIONID=E61DD3443AE9E119060A637CF039936B; Path=/webservice"}
当我将整数作为字符串包装在后端时,一切都很好。但是,我真的想了解导致此错误的原因。
相关链接:Angular $resource does not parse correctly an integer response
答案 0 :(得分:4)
相反,我们所有的都是Number
,它们存储为IEEE754 floating-point values。从the ECMAScript standard开始,我们有:
请注意,幅度不大于2 ^ 53的所有正整数和负整数都可以在Number类型中表示(实际上,整数0有两个表示,+ 0和-0)。
请注意,不意味着JavaScript中可表示的最大整数是2 ^ 53,而是一旦大于此值,则只能表示一些整数。一旦你耗尽了IEEE754浮点表示的53位尾数,整数之间就会出现间隙。
您的示例会话ID 115053508782199126
比2^53
大得多,并且它最接近的整数浮点值为115053508782199120
。所以,你需要使用字符串。