Вопрос

Я столкнулся со следующей проблемой:

В нашей базе данных у нас есть объекты с идентификаторами, такими как 4040956363970588323.Я пишу какой-то клиент-мастер на jQuery - jQuery - запрос для взаимодействия с такими объектами.Клиент получает базовые данные об объектах через Аякс запрос, подобный:

$.ajax({
        url: "/api/pages/",
        type: "get",
        dataType: "json",
        data: {"id": site_id},
        success: function(data){
            if (data.success){
                for (var pidx in data.pages){
                    console.log(data.pages[pidx].id);
                    var li = $('<li class="ui-widget-content"></li>');
                    var idf = $('<input type="hidden" id="pid" value="{0}"/>'.format(data.pages[pidx].id))
                    var urlf = $('<input type="hidden" id="purl" value="{0}"/>'.format(data.pages[pidx].url))
                    li.text(data.pages[pidx].title);
                    li.append(idf);
                    li.append(urlf);
                    $("#selectable_pages_assign").append(li);
                }
                pages_was = $("#selectable_pages_assign>li");
            }
            else
                 updateTips(data.message);
        },
        error: function(){
             updateTips("Internal erro!");
        }
})

Итак, как вы видите, я отправляю такие данные, как JSON объект (фрагмент серверного кода):

return HttpResponse(dumps({
                        "success": True,
                        "pages": [{"id": page.id, "title": page.title, "url": page.image} for page in Page.objects.filter(site = site)]
            }))

Согласно Поджигатель, сервер отправляет правильные идентификаторы в данных, но console.log(..) вместо правильного идентификатора (4040956363970588323) выводит id 4040956363970588000.

Почему это происходит?

Без правильных идентификаторов есть ли шанс, что мой мастер будет работать правильно :)

Это было полезно?

Решение

Я предполагаю, что что-то идет не так при преобразовании в JSON.Когда вы записываете значение, вам, вероятно, нужно будет заключить его в кавычки, чтобы убедиться, что оно обрабатывается как строка.

Другие советы

По-моему, это похоже на какую-то проблему с переполнением.

Согласно это обсуждение здесь, на SO, JavaScript может обрабатывать только целые числа размером 2 ^ 64, что означает, что максимальное значение INT находится где-то около

184467440737100000

что намного меньше , чем

4040956363970588323

Редактировать:Извините, самое большое точное целое число равно 2 ^ 53, но случай тот же.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top