2010-11-16 10 views
17

मैं jQuery का उपयोग कर कुछ ajax डेटा पोस्ट करने के लिए एक हैश को परिभाषित करने की जरूरत है। हैश कुछ ऐसी दिखाई देगी:कैसे हैश पर चर नाम के रूप में चर मान देना?

var setname = 'set_1'; 
elements = { set_1: {'beer','water','wine'} }; 

चुनौती मैं हल करने के लिए 'सेट -1' (सरणी तत्वों की कुंजी) गतिशील var setname के मूल्य के आधार नाम दिया जाना चाहिए की जरूरत है।

मैं PHP में निश्चित रूप से eval() .. का उपयोग कर इसे इस तरह डबल डॉलर चिह्न उपयोग किया जा सकता से बचना चाहते हैं: $$setname, लेकिन किस तरह से जावास्क्रिप्ट में यह करने के लिए है?

उत्तर

29

आप आप ऐसा चाहते करना चाहते हैं क्या कर सकते हैं:

var setname = 'set_1', elements = {}; 
elements[setname] = ['beer','water','wine']; 
alert(elements['set_1']); // beer,water,wine 

http://jsfiddle.net/x5KRD/ पर कार्रवाई में देखें।

जे एस में सभी वस्तुओं डॉट नोटेशन (obj.method() या obj.property), या ब्रैकेट अंकन (obj['method']() या obj['property']) का उपयोग कर पहुँचा जा सकता है। ब्रैकेट नोटेशन का उपयोग करने से आप गतिशील रूप से विधि/संपत्ति/कुंजी नाम निर्दिष्ट कर सकते हैं।

उदाहरण के लिए, जबकि अनाड़ी, window['alert']('hi')window.alert('hi') के बराबर है।

ध्यान दें कि आपका कोड इस तरह काम नहीं करेगा, क्योंकि आप किसी भी सरणी को रखने के लिए ऑब्जेक्ट शाब्दिक नोटेशन ({'beer','water','wine'}) का उपयोग कर रहे हैं (यह इसके बजाय स्क्वायर ब्रैकेट ['beer','water','wine'] में होना चाहिए)। ऑब्जेक्ट अक्षरों में कुंजी-मूल्य जोड़े होने की आवश्यकता होती है।

+0

आप कर रहे हैं सही .. मेरी त्रुटि, कि एक संपादित सरलीकृत संस्करण, मैं वास्तव में महत्वपूर्ण मूल्य जोड़े अपने वास्तविक में है था वस्तु शाब्दिक। इसलिए यह कुंजी नाम के गतिशील असाइनमेंट को छोड़कर ठीक काम करता है .. – mikkelbreum

+0

और मुझे यह नोटेशन का उपयोग करके ऐसा करने की ज़रूरत है कि jQuery.post() पोस्ट डेटा पोस्ट करने के लिए स्वीकार करेगा .. – mikkelbreum

+0

@mikkelbreum मैंने स्पष्ट किया कि मैं किस बारे में बात कर रहा था। –

6
var setname = 'set_1', 
    elements = {}; 

elements[setname] = ['beer','water','wine']; 
2

आपको यह समझना होगा कि वास्तव में जावास्क्रिप्ट में "JSON नोटेशन" जैसी कोई चीज़ नहीं है - यह मूल जावास्क्रिप्ट नोटेशन है जिसके बारे में हम बात कर रहे हैं। जो jQuery चाहता है वह पोस्ट डेटा के लिए जावास्क्रिप्ट मान है, जरूरी नहीं कि जावास्क्रिप्ट ऑब्जेक्ट स्थिर हो।

इस प्रकार, अपने कोड अपने पोस्ट को इस डेटा तैयार करेंगे:

var elements = {}; 
elements[setName] = { /* something */ }; 
elements[somethingElse] = { /* something else */ }; 

और इतने पर। जब आप पोस्ट करने के लिए तैयार कर रहे हैं, तो आप सिर्फ "तत्वों" का उपयोग करेंगे:

$.post(url, elements, function() { /* callback code */ }); 
संबंधित मुद्दे