6

私は次の問題に直面しました:

私たちのデータベースには、4040956363970588323 のような ID を持つオブジェクトがあります。私は、そのようなオブジェクトとやり取りするための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 = $('<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)]
            }))

Firebugによると、サーバーは正しい ID をデータで送信しますがconsole.log(..)、正しい ID (4040956363970588323) の代わりに を出力しますid 4040956363970588000

なぜこれが起こるのですか?

正しいIDがなければ、私のウィザードが正しく動作する可能性があります:)

4

2 に答える 2

9

私の推測では、JSON への変換で何か問題が発生しています。値を記述するときは、おそらく文字列として扱われるように、値を引用符で囲む必要があります。

于 2010-02-27T13:17:38.113 に答える
3

それは私にはある種のオーバーフローの問題のように見えます。

SOに関するこの議論によると、JavaScript はサイズ 2^64 の INT のみを処理できます。これは、最大 INT がどこかにあることを意味します。

184467440737100000

よりもはるかに少ない

4040956363970588323

編集: 申し訳ありませんが、最大の正確な整数は 2^53 ですが、ケースは同じです。

于 2010-02-27T13:26:48.773 に答える