2010-02-27 14 views
6

मैं एक अगली समस्या का सामना करना पड़ गया है:jQuery और लंबे समय तक पूर्णांक आईडी

हमारे डेटाबेस में हम, आईडी के साथ वस्तुओं है 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 के अनुसार

, सर्वर डेटा में सही आईडी भेजता है, लेकिन सही आईडी (4040956363970588323) के बजाय console.log(..), id 4040956363970588000 आउटपुट करता है।

ऐसा क्यों होता है?

सही आईडी के बिना, कोई मौका, कि मेरे जादूगर सही ढंग से काम करेंगे :)

+0

FWIW, आपका त्रुटि संदेश कहता है 'अपडेटटिप्स ("आंतरिक एरो!");' (शब्द "त्रुटि" पर टाइपो)। जो मनोरंजक प्रकार है: पी –

उत्तर

9

मेरा अनुमान है कुछ JSON के लिए रूपांतरण में गलत हो रहा है। जब आप मान लिखते हैं, तो आपको यह सुनिश्चित करने के लिए शायद इसे स्ट्रिंग के रूप में माना जाता है, इसके आस-पास उद्धरण डालना होगा।

+1

+1 इसे स्ट्रिंग – tvanfosson

+0

के रूप में भेजने के लिए सुनिश्चित करने के लिए आईडी मान को स्ट्रिंग – Pointy

+0

बनाने के लिए एक और वोट और आप यह कैसे करते हैं? मैं एचटीएमएल 5 डेटा से एक मूल्य पकड़ रहा हूं और इसे एक स्ट्रिंग के रूप में पेश करने की कोशिश कर रहा हूं लेकिन यह अभी भी गलत तरीके से गोल किया जा रहा है: '' '+ $ (यह) .डेटा (' आईडी ') +' ''। क्या ऐसा करने के लिए इससे अच्छा तरीका है? – andrewtweber

3

ऐसा लगता है कि मुझे किसी प्रकार की अतिप्रवाह समस्या है।

this discussion इतने पर यहां के अनुसार, जावास्क्रिप्ट केवल आकार 2^64 है, जो अधिकतम INT का मतलब है की INTs कहीं

184467440737100000 

चारों ओर संभाल कर सकते हैं है जो काफी

से कम
4040956363970588323 

संपादित है : क्षमा करें, सबसे बड़ा सटीक पूर्णांक 2^53 है, लेकिन मामला वही है।

+0

आपके उत्तर के लिए धन्यवाद, बहुत उपयोगी जानकारी –

+1

जावास्क्रिप्ट संख्या आईईईई 754 डबल-प्रेसिजन फ्लोटिंग पॉइंट वैल्यू हैं, एकमात्र योग्यता के साथ कि ईसीएमएस्क्रिप्ट मानक जिस पर जावास्क्रिप्ट आधारित है, शायद अधिक से अधिक 'NaN' मान प्रदान करता है। इस प्रकार, जब आप प्रतिनिधित्व की परिशुद्धता को पार करते हैं, तो आप पूर्णांक परिशुद्धता खो देते हैं, जो वास्तव में 2 ** 53 से कम परिमाण वाले सभी पूर्णांक को संरक्षित करता है, और केवल उस सीमा के बाहर कुछ पूर्णांक को संरक्षित करता है (अच्छे बाइनरी प्रस्तुतियों वाले, अधिक या कम, पतले वाले अनंतता के रूप में बाहर बढ़ता है जब तक कि पूर्ण ओवरफ्लो अनंत मूल्यों के लिए होता है)। –

संबंधित मुद्दे