2012-06-07 31 views
5

क्या एक छिपी इनपुट फ़ील्ड का मान सरणी के रूप में होना संभव है और फिर इसे स्प्रिंग एमवीसी नियंत्रक को पास कर दिया गया है?जावास्क्रिप्ट छिपे हुए इनपुट ऐरे

function foo(){ 
var myArray = new Array(); 
myArray[0] = "Hello"; 
myArray[1] = "World!"; 
document.getElementById("hiddenInp").value=myArray; 
} 

और फिर नियंत्रक में अगर के बारे में मैं एक साहचर्य सरणी के साथ काम कर रहा हूँ

@RequestMapping ... 
public String test(HttpServletRequest request){ 
String[] myArray = request.getParameter("hiddenInp"); 
// Assuming that the name of the hidden input field is also hiddenInp 
System.out.println(myArray[0] + myArray[1]); 
... 
} 

कैसे की तरह कुछ करते हैं? जहां सूचकांक int

+0

जावास्क्रिप्ट में सहयोगी सरणी नहीं है। – Sampson

+0

@ जोनाथन सैम्पसन शायद मैं गलत शब्द का उपयोग कर रहा हूं। मेरा मतलब था, "0" और "1" जैसे इंडेक्स के बजाय, मैं 'myArray ["ए"] = "हैलो"; '। मुझे पता है कि यह काम करता है क्योंकि मैंने 'अलर्ट (myArray ["ए"]) की कोशिश की है और यह मुझे "हैलो" के साथ पॉप-अप बॉक्स देता है। – szrrizvi

+0

@ जोनाथन सैम्पसन: लेकिन ऑब्जेक्ट्स (और हैं) मानचित्र के रूप में उपयोग किए जा सकते हैं ... – Bergi

उत्तर

13

के बजाय स्ट्रिंग हैं, तो आपका सबसे अच्छा विकल्प सरणी को स्ट्रिंग करें और फिर इसे असाइन करें।

element.value = JSON.stringify(["Hello", "World"]); 

परिणामस्वरूप मूल्य एक JSON स्ट्रिंग है तो सर्वर पर पार्स किया जा सकता, सरणी पुनः हो जाएगा। यह दृष्टिकोण ऑब्जेक्ट्स के लिए भी काम करता है यदि आप किसी एसोसिएटिव सरणी जैसा दिखना चाहते हैं।

मुझे ध्यान रखना चाहिए कि JSON आज ब्राउज़र में काफी अच्छा समर्थन है, पुराने ब्राउज़र इसका समर्थन नहीं कर सकते हैं। आप उन मामलों में polyfill the feature fairly easily कर सकते हैं:

+1

करने के लिए आवश्यक नहीं है। मान को सरणी के रूप में सेट करना ठीक से करेगा। join() करता है। .join() का उपयोग करना कुछ भी नहीं के लिए अतिरिक्त प्रसंस्करण है। – Ian

+0

@ianpgall नोट किया गया। मैं भूल जाता हूं कि जावास्क्रिप्ट स्वचालित रूप से उपयुक्त प्रकार और मूल्य के लिए सरणी के कास्टिंग को संभालेगा। – Sampson

+0

मुझे यह काम करने की उम्मीद नहीं थी - मैंने सोचा था कि इसमें "[" और "]" शामिल हो सकता है लेकिन यह किसी भी तरह से .join() की तरह काम कर रहा है। कोई समस्या नहीं, बस इसे इंगित करना चाहता था! – Ian

1

हालांकि आप इसे जावास्क्रिप्ट में सेट करते हैं, तो आपको इसे सर्वर पर पार्स करना होगा। इसका मतलब है कि "सी" सरणी को "सी" सरणी में विभाजित करना है, फिर इसे जितना चाहें उतना एक्सेस करना। फ़ॉर्म सबमिशन में भेजे गए सभी मानों को एक स्ट्रिंग के रूप में बिल्कुल भेजा जाता है।

आप छिपा इनपुट के मूल्य को सेट करने के लिए http://www.w3schools.com/jsref/jsref_join.asp का उपयोग करना चाह सकते हैं। हालांकि यह जरूरी नहीं है - यह jjoin() का उपयोग किए बिना ठीक लगता है। लेकिन यह याद रखना महत्वपूर्ण है कि मान सर्वर पर एक स्ट्रिंग होगा, एक सरणी नहीं।

+0

पर एक नज़र डालें http://w3fools.com/ – Bergi

+0

हां, मैंने देखा कि बहुत समय पहले। जबकि मुझे लगता है कि यह मजाकिया है, लेकिन इसका सरल संदर्भों के लिए डब्ल्यू 3 स्कूलों का उपयोग करने के साथ कुछ लेना देना नहीं है। मैंने लिंक प्रदान किया ताकि ओपी सिंटैक्स का सही ढंग से उपयोग कर सके, समाधान के रूप में नहीं (विशेष रूप से जब से मैं कह रहा हूं। Join() का उपयोग नहीं किया जाना चाहिए)। – Ian

1

आप केवल पैरामीटर के रूप में एक स्ट्रिंग को पास कर सकते हैं, साथ ही साथ इनपुट के मान भी कर सकते हैं। इसका मतलब है कि आपको ";" के साथ जुड़कर स्वचालित रूप से ऐरे को स्ट्रिंग में परिवर्तित कर दिया जाएगा, आप इसे मैन्युअल रूप से .join() method के साथ भी कर सकते हैं।

आपके बाद सर्वर को उस स्ट्रिंग को चयनित डिलीमीटर द्वारा विभाजित करने की आवश्यकता होगी।

आप उन्हें एक सरणी के रूप में भेजना चाहते हैं, afaik आप दो इनपुट तत्वों की आवश्यकता होगी:

<input type="hidden" name="hiddenInp[]"<!-- should be more descriptive --> value="a" /> 
<input type="hidden" name="hiddenInp[]"<!-- the same name --> value="b" /> 
+0

आप एक इनपुट के रूप को एक सरणी के रूप में सेट कर सकते हैं। जावास्क्रिप्ट मूल रूप से करता है जो .join() करना चाहते हैं, लेकिन .join() का उपयोग करना जरूरी नहीं है जब तक कि आप "," – Ian

+0

के अलावा कोई डिलीमीटर नहीं चाहते हैं, यही वही है जो मैंने कहा था। हालांकि, मैं यह भी स्पष्ट करने के लिए .join (",") का उपयोग करता हूं कि मैं एक स्ट्रिंग सेट कर रहा हूं। – Bergi

0

मैं निम्नलिखित link के माध्यम से में इस सवाल का जवाब मिल गया।

आप किसी भी जावास्क्रिप्ट ऑब्जेक्ट या किसी सरणी प्रदान करना चाहते हैं जब यह करने के इस प्रकार है:

var javascript_variable = 'object' or ['fruit1', 'fruit2', 'fruit3']; 
$('#hiden_input_element_unique_id').val(JSON.stringify(javascript_variable)); 

फ़ॉर्म जमा करने के बाद, serverside में हम इसे डिकोड करने के लिए इस प्रकार है:

$fruits_array = json_decode($_POST['hiden_input_element_unique_name']); 

यह जिस तरह से आप सर्वर-साइड में कोई जावास्क्रिप्ट सरणी प्राप्त कर सकते हैं, जिसे आपने इसे क्लाइंट-साइड में जावास्क्रिप्ट के माध्यम से फ़ॉर्म फॉर्म में सेट किया है!

+0

@ फ्लेक्सो मार्गदर्शन और संपादन के लिए धन्यवाद! इस दौरान इसका पालन करेंगे! :-) –