jQuery et long ids int
-
23-09-2019 - |
Question
Je suis face à un problème suivant:
Dans notre base de données nous avons des objets avec des ids, comme 4040956363970588323. J'écris quelques-uns-assistant client sur jQuery pour interagir avec ces objets. Le client reçoit des données de base sur les objets auge demande de l'Ajax, comme:
$.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!");
}
})
Alors, comme vous le voyez j'envoyer des données comme JSON objet (un peu de code serveur) :
return HttpResponse(dumps({
"success": True,
"pages": [{"id": page.id, "title": page.title, "url": page.image} for page in Page.objects.filter(site = site)]
}))
Selon Firebug , serveur envoyer ids droit dans les données, mais au lieu de console.log(..)
id correct ( 4040956363970588323), sorties id 4040956363970588000
.
Pourquoi cela?
Sans ids droit, aucune chance, que mon assistant correctement:)
La solution
Je suppose que quelque chose va mal dans la conversion en JSON. Lorsque vous écrivez la valeur, vous aurez probablement besoin de mettre des guillemets autour d'elle, pour vous assurer qu'il est traité comme une chaîne.
Autres conseils
Cela ressemble à une sorte de problème de trop-plein pour moi.
Selon cette discussion ici sur le SO, JavaScript ne peut gérer INTs de taille 2 ^ 64, ce qui signifie que le max INT est quelque part
184467440737100000
ce qui est bien inférieur à
4040956363970588323
EDIT: Désolé, le plus grand entier exact est 2 ^ 53, mais le cas est le même
.