jQuery data()将字符串视为数字的问题

时间:2012-06-09 03:06:38

标签: javascript jquery floating-point

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

<div data-id="211285677671858177">

JavaScript:

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

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

5 个答案:

答案 0 :(得分:65)

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

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

  

每次尝试都将字符串转换为JavaScript值   (否则,这包括布尔值,数字,对象,数组和null)   它留作一个字符串。 以字符串形式检索值的属性   如果没有尝试转换它,请使用attr()方法。

答案 1 :(得分:3)

JavaScript中没有“长整数”这样的东西。所有数字都是64位浮点数。您的号码无法在IEEE-794浮点表示中完全表示。

“修复”这个问题的唯一方法是将数字转换为域中可以处理大整数值的字符串。

答案 2 :(得分:2)

尝试将其类型化为字符串:

id: '' + $(this).data('id').toString();

答案 3 :(得分:0)

如果希望data将其视为字符串,请尝试在单引号中包围数据属性值。我猜,问题在于你是否会引用剥离。

答案 4 :(得分:0)

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

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

对我来说,为了直接获取数据ID,我直接使用了.attr(&#34; data-id&#34;),这给了我正确的ID。