Подтвердить что ты не робот

Проблема с данными jQuery(), обрабатывающая строку как число

У меня есть MySQL BIGINT, который я храню в данных HTML5. Затем я пытаюсь получить доступ к этому значению и передать его через вызов AJAX.

<div data-id="211285677671858177">

И JavaScript:

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

Проблема в том, что функция jQuery data, похоже, возвращает это значение как плавающую точку, а не строку. Поэтому добавление его в пустую строку не помогает, потому что оно уже слишком поздно - оно уже округлено (в данном случае - 211285677671858180). Что я могу сделать, чтобы исправить это?

4b9b3361

Ответ 1

Это не случай "длинного int" действительно, номер, который вы получаете, является самым доступным представлением как число с плавающей запятой.

В любом случае, вы хотите, чтобы значение было как строка. Отправьте jQuery docs для .data (внимание мое):

Производится каждая попытка преобразовать строку в значение JavaScript (это включает в себя логические значения, числа, объекты, массивы и null) в противном случае он остается как строка. Чтобы получить атрибут value как строку без какой-либо попытки его преобразования, используйте метод attr().

Ответ 2

В JavaScript нет такой вещи, как "длинное целое". Все номера - 64-битная с плавающей запятой. Ваш номер не может быть представлен точно в представлении с плавающей запятой IEEE-794.

Единственный способ "исправить" это сделать число в строку в домене, который может справиться с большими целыми значениями.

Ответ 3

попробуйте ввести его в строку:

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

Ответ 4

Попробуйте сопоставить значение атрибута данных в одинарных кавычках, если вы хотите, чтобы data рассматривал его как строку. Проблема там, я думаю, будет у вас есть кавычки, чтобы раздеться.

Ответ 5

У меня была аналогичная проблема, когда идентификатор данных (буквенно-цифровой) преобразовывался с использованием .data(), в результате последние несколько символов преобразовывались во все нули. Потребовалось некоторое исследование, чтобы определить, что это ошибка в реализации jQuery.data().

Ссылка: http://bugs.jquery.com/ticket/7579

Для меня, чтобы получить идентификатор данных напрямую, как работа, я использовал .attr( "data-id" ) напрямую, и это дало мне правильный идентификатор.