49

HTML5データに保存しているMySQLBIGINTがあります。次に、その値にアクセスして、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 に答える