我遇到了下一个问题:
在我们的数据库中,我们有id的对象,如4040956363970588323。 我在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,任何机会,我的向导将正常工作:)
答案 0 :(得分:9)
我的猜测是转换为JSON时出错了。当你写这个值时,你可能需要在它周围加上引号,以确保它被视为一个字符串。
答案 1 :(得分:3)
这看起来像是某种溢出问题。
根据this discussion这里的SO,JavaScript只能处理大小为2 ^ 64的INT,这意味着最大INT在某处
184467440737100000
远远小于
4040956363970588323
编辑:对不起,最大的整数是2 ^ 53,但情况是一样的。