I've faced with a next problem:
In our database we have objects with ids, like 4040956363970588323. I'm writing some client-wizard on jQuery for interacting with such objects. Client receives base data about objects trough an Ajax request, like:
$.a开发者_JAVA百科jax({
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!");
}
})
So, as you see I send data like JSON object (a bit of server code):
return HttpResponse(dumps({
"success": True,
"pages": [{"id": page.id, "title": page.title, "url": page.image} for page in Page.objects.filter(site = site)]
}))
According to Firebug, server send right ids in data, but console.log(..)
instead of correct id (4040956363970588323), outputs id 4040956363970588000
.
Why does this happen?
Without right ids, any chance, that my wizard will work correctly :)
My guess is something is going wrong in the conversion to JSON. When you write the value, you'll probably need to put quotes around it, to make sure it's treated as a string.
That looks like some kind of overflow problem to me.
According to this discussion here on SO, JavaScript can only handle INTs of size 2^64, which means the max INT is somewhere around
184467440737100000
which is much less than
4040956363970588323
EDIT: Sorry, the largest exact integer is 2^53, but the case is the same.
精彩评论