Проблема с данными 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
). Что я могу сделать, чтобы исправить это?
Ответы
Ответ 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" ) напрямую, и это дало мне правильный идентификатор.