Я имею сталкивающийся со следующей проблемой:
В нашей базе данных у нас есть объекты с идентификаторами, как 4040956363970588323. Я пишу некоторый клиентский мастер на jQuery для взаимодействия с такими объектами. Клиент получает базовые данные о канавке объектов запрос Ajax, как:
$.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 = $('');
var idf = $(''.format(data.pages[pidx].id))
var urlf = $(''.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)]
}))
Согласно Firebug, сервер отправляет правильные идентификаторы в данных, но console.log(..)
вместо корректного идентификатора (4040956363970588323), выводов id 4040956363970588000
.
Почему это происходит?
Без правильных идентификаторов, любого шанса, что мой мастер будет работать правильно :)
Думаю, что-то не так при преобразовании в JSON. Когда вы пишете значение, вам, вероятно, придется заключить его в кавычки, чтобы убедиться, что оно обрабатывается как строка.
Мне кажется, это какая-то проблема с переполнением.
Согласно в этом обсуждении здесь, на SO, JavaScript может обрабатывать только INT размером 2 ^ 64, что означает, что максимальное значение INT находится где-то около
184467440737100000
, что намного меньше, чем
4040956363970588323
EDIT: Извините , наибольшее точное целое число 2 ^ 53, но случай тот же.