6


0

jQueryおよびlong int id

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

データベースには、4040956363970588323のようなIDを持つオブジェクトがあります。 このようなオブジェクトと対話するために、http://en.wikipedia.org/wiki/JQuery [jQuery]でクライアントウィザードを作成しています。 クライアントは、http://en.wikipedia.org/wiki/Ajax_%28programming%29 [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!");
        }
})

したがって、ご覧のように、http://en.wikipedia.org/wiki/JSON [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を送信しますが、正しいID(4040956363970588323)ではなく `console.log(..)`を送信すると、 `id 4040956363970588000`が出力されます。

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

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

2 Answer


9


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


3


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

https://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-to [この議論] SO 、JavaScriptはサイズ2 ^ 64のINTのみを処理できます。つまり、最大INTはどこかにあります

184467440737100000

それははるかに少ないです

4040956363970588323

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