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:)

Était-ce utile?

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

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top