49

我有一个存储在 HTML5 数据中的 MySQL BIGINT。然后我试图访问该值并通过 AJAX 调用传递它。

<div data-id="211285677671858177">

和 JavaScript:

var send_data = {
    id: '' + $(this).data('id')
}
$.post('/send.php', send_data);

问题是 jQuerydata函数似乎将该值检索为浮点而不是字符串。所以将它附加到一个空白字符串并没有帮助,因为它已经太晚了 - 它已经被四舍五入(在这种情况下为211285677671858180)。我能做些什么来解决这个问题?

4

5 回答 5

78

这实际上不是“long int”的情况,您得到的数字是最接近的可用浮点数表示。

无论如何,您希望将值作为字符串。引用jQuery 文档.data(强调我的):

每次尝试都将字符串转换为 JavaScript 值(这包括布尔值、数字、对象、数组和 null),否则将其保留为字符串。要将值的属性作为字符串检索而不进行任何转换,请使用 attr() 方法。

于 2012-06-09T03:17:55.513 回答
3

JavaScript 中没有“长整数”之类的东西。所有数字都是 64 位浮点数。您的号码无法以 IEEE-794 浮点表示形式准确表示。

“解决”这个问题的唯一方法是将数字变成可以处理大整数值的域中的字符串。

于 2012-06-09T03:14:41.587 回答
2

尝试将其类型转换为字符串:

id: '' + $(this).data('id').toString();
于 2012-06-09T03:09:29.630 回答
0

如果您想将其视为字符串,请尝试用单引号将数据属性值括起来data。我想,那里的问题是您将要剥离引号。

于 2012-06-09T03:22:38.457 回答
0

我有一个类似的问题,其中数据 ID(字母数字)通过使用 .data() 进行转换,结果最后几个字符被转换为全零。经过一些研究确定这是 .data() 的 jQuery 实现中的一个错误。

参考:http ://bugs.jquery.com/ticket/7579

对我来说,为了直接获取数据 ID 作为解决方法,我直接使用了 .attr("data-id") ,这给了我正确的 ID。

于 2014-12-17T16:19:47.693 回答