2012-06-09 22 views
34

के रूप में स्ट्रिंग का इलाज करना मेरे पास एक MySQL बिगिनट है जिसे मैं HTML5 डेटा में संग्रहीत कर रहा हूं। तो मैं उस मूल्य तक पहुंचने की कोशिश कर रहा हूं और इसे एजेक्स कॉल के माध्यम से पास कर रहा हूं।jQuery डेटा() के साथ समस्या

<div data-id="211285677671858177"> 

और जावास्क्रिप्ट:

var send_data = { 
    id: '' + $(this).data('id') 
} 
$.post('/send.php', send_data); 

मुद्दा jQuery data समारोह एक चल बिन्दु के रूप में है कि मूल्य और नहीं एक स्ट्रिंग को पुनः प्राप्त करने लगता है कि है। तो इसे रिक्त स्ट्रिंग में जोड़ना मदद नहीं कर रहा है क्योंकि यह बहुत देर हो चुका है - यह पहले ही गोल हो चुका है (इस मामले में 211285677671858180)। मुझे इसे ठीक करने के लिए क्या करना चाहिए?

उत्तर

58

यह वास्तव में "लंबी int" का मामला नहीं है, जो संख्या आप प्राप्त कर रहे हैं वह फ़्लोटिंग-पॉइंट नंबर के रूप में निकटतम उपलब्ध प्रतिनिधित्व है।

वैसे भी, आप एक स्ट्रिंग के रूप में मान चाहते हैं। jQuery docs for .data (जोर मेरा) उद्धरण:

हर प्रयास एक JavaScript मान (इस बूलियन्स, संख्या, ऑब्जेक्ट, अरै, और अशक्त भी शामिल है) अन्यथा यह एक स्ट्रिंग के रूप छोड़ दिया है करने के लिए स्ट्रिंग परिवर्तित करने के लिए किया जाता है। किसी स्ट्रिंग के रूप में मान को बदलने के किसी भी प्रयास के बिना मान की विशेषता को पुनर्प्राप्त करने के लिए, attr() विधि का उपयोग करें।

+0

स्पष्टीकरण के लिए ठीक है धन्यवाद। मेरी इच्छा है कि 'डेटा' को कन्वर्ट न करने का कोई तरीका न हो, लेकिन मुझे लगता है कि 'attr' अब – andrewtweber

+0

के लिए करेगा) मैंने यह भी पाया है कि [HTMLElement.dataset] का उपयोग करके (https://developer.mozilla.org/en -US/दस्तावेज़/वेब/एपीआई/एचटीएमलेमेंट/डेटासेट) भी काफी सरल और कार्यान्वित करने के लिए तेज़ है। –

2

कोशिश स्ट्रिंग के लिए यह typecasting:

id: '' + $(this).data('id').toString(); 
+1

यह काम नहीं करता है, यह अभी भी अंधेरे में 80 – andrewtweber

+1

@andrewtweber कुल शॉट पर गोल कर रहा है लेकिन $ (this) .attr ('data-id') का उपयोग करता है; इसे एक स्ट्रिंग के रूप में रखें? – TK123

+0

हाँ, यह काम करता है। दिलचस्प ... मुझे आश्चर्य है कि क्या 'डेटा' चीज एक बग है? मैं कुछ समय के लिए खुला प्रश्न छोड़ दूंगा कि दूसरों को क्या कहना है – andrewtweber

3

एक "लंबे समय पूर्णांक" जावास्क्रिप्ट में जैसी कोई चीज नहीं है। सभी संख्या 64-बिट फ्लोटिंग पॉइंट हैं। आईईईई -7 9 4 फ्लोटिंग पॉइंट प्रस्तुति में आपका नंबर बिल्कुल प्रदर्शित नहीं किया जा सकता है।

यह "ठीक करने" का एकमात्र तरीका यह है कि संख्या को उस डोमेन में एक स्ट्रिंग में बनाना है जो बड़े पूर्णांक मानों का सामना कर सके।

+1

ठीक है। भले ही, मैं नहीं चाहता * यह एक संख्या हो। मैं चाहता हूं कि इसका इलाज एक स्ट्रिंग है, लेकिन 'डेटा' इसे एक फ्लोटिंग पॉइंट के रूप में पेश करता है। कोई विचार? – andrewtweber

+2

सभी विशेषता मान स्ट्रिंग हैं।हालांकि, जब आप '.data()' API का उपयोग करते हैं तो jQuery उपयोगी होने की कोशिश करता है और चीजों को संख्यात्मक प्रकार में परिवर्तित करता है। विशेषता के '.attr()' मान प्राप्त करने का प्रयास करें। – Pointy

0

डेटा आसपास के प्रयास एकल उद्धरण में अधिक महत्व देते हैं, अगर आप data एक स्ट्रिंग की तरह यह इलाज करना चाहते हैं। समस्या है, मुझे लगता है, क्या आपके पास स्ट्रिप करने के लिए उद्धरण होंगे।

0

मेरे पास एक समान समस्या थी जहां डेटा आईडी (अल्फान्यूमेरिक) .data() के उपयोग के माध्यम से परिवर्तित हो रही थी जिसके परिणामस्वरूप अंतिम कुछ वर्ण सभी शून्यों में परिवर्तित हो रहे थे। यह निर्धारित करने के लिए कुछ शोध हुआ कि यह .data() के jQuery कार्यान्वयन में एक बग है।

संदर्भ: http://bugs.jquery.com/ticket/7579

मेरे लिए, चारों ओर एक काम को सीधे डेटा आईडी प्राप्त करने के लिए, मैं ("डेटा-आईडी") .attr इस्तेमाल किया सीधे और यह मुझे सही आईडी दे दी है।

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