2012-12-01 10 views
6

मैं यह देखने की कोशिश कर रहा हूं कि [object FormData] के अंदर कौन सी सामग्री निहित है, और विशेष रूप से एक विशिष्ट तत्व के अंदर जिसका नाम Name होना चाहिए। मैं जाँच करने के लिए यह सचेत करने के लिए, की तरह है, तो सामग्री सही है, लेकिन ऐसा करने से रिटर्न undefined होगा:[ऑब्जेक्ट फॉर्मडाटा] (परीक्षण के लिए) में चेतावनी विशिष्ट तत्व

alert(fd['Name']); 

मैं बहुत यकीन है कि मैं सही ढंग से प्रपत्र डेटा लोड हो रहा हूँ कर रहा हूँ, इसलिए यदि समस्या है मैं सोच रहा था कि मैं गलत तरीके से डेटा ...

पुनश्च केवल fd रिटर्न [object FormData]

+0

और कोड, साथ ही साथ अपने एचटीएमएल दिखाएं। –

उत्तर

10

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

MDN का हवाला देते हुए:

नोट: ... FormData वस्तुओं stringifiable ऑब्जेक्ट नहीं है। यदि आप सबमिट किए गए डेटा को स्ट्रिंग करना चाहते हैं, तो पिछले शुद्ध-AJAX उदाहरण का उपयोग करें। ध्यान दें कि, हालांकि इस उदाहरण में कुछ फ़ाइल फ़ील्ड हैं, जब आप फॉर्मडाटा एपीआई के माध्यम से कोई फॉर्म सबमिट करते हैं तो आप फ़ाइलरिएडर एपीआई का उपयोग करने की आवश्यकता नहीं है: फ़ाइलें स्वचालित रूप से लोड और अपलोड की जाती हैं।

कोई रास्ता जावास्क्रिप्ट में यह जानकारी प्रतिनिधित्व करने के लिए नहीं है, इसलिए के रूप में JSON काम नहीं करेगा (जो मुझे संकेत देता है आश्चर्य क्यों इस उत्तर पहली जगह में स्वीकार कर लिया गया) मेरी भोली सुझाव बस इसे क्रमानुसार करने।

जो आप प्राप्त करने का प्रयास कर रहे हैं उसके आधार पर (उदाहरण के लिए। यदि आप केवल डीबग करने का प्रयास कर रहे हैं), तो यह संभव है कि यह जानकारी किसी सर्वर साइड स्क्रिप्ट से उछाल दे जो संभव JSON मेटाडेटा लौटाती हो। उदाहरण के लिए, PHP में, आप अपना फॉर्मडाटा analyzeForm.php पर भेज सकते हैं, जो प्रासंगिक अनुरोध superglobal के तहत फ़ॉर्मडाटा से जुड़ी सबकुछ आसानी से एक्सेस कर सकता है। लिपि आपके फॉर्म की सामग्री को पचाने और JSON को पार्स करने के लिए प्रासंगिक जानकारी को वापस लाएगी। यह बहुत अक्षम है, इसलिए यह शायद उत्पादन वातावरण के लिए उपयुक्त नहीं है, लेकिन यह कुछ है।

पुरानी गलत उत्तर:

आप का उपयोग कर की कोशिश कर सकते:

alert(JSON.stringify(fd)); 

fd की संरचना का एक शाब्दिक प्रतिनिधित्व देखने पर।

आप console.log का भी उपयोग कर सकते हैं, लेकिन यह एक गैर-मानक सुविधा है और सभी ब्राउज़रों में उपस्थित होने की गारंटी नहीं है।

+0

मैं एफएफ और क्रोम में अपना दृष्टिकोण दोहरा नहीं सकता। मुझे बस खाली वस्तु मिल रही है: '{}' – IvanZh

+0

@IvanZh ऐसा इसलिए है क्योंकि आपकी वस्तु खाली है। एक खाली वस्तु '{}' को क्रमबद्ध करती है, इसलिए यह वही है जो आप देखते हैं। –

+0

हो सकता है कि मैं कुछ गलत कर रहा हूं? कृपया, इसे देखें, या ब्राउज़र कंसोल में चलाएं: 'var fd = new formData; fd.append ('test', 123); चेतावनी (JSON .stringify (fd)) '' – IvanZh

-2

चेतावनी तक पहुँचने कर रहा हूँ आप क्या करना चाहिए:

console.log(fd['Name']); 

और अधिकांश ब्राउज़रों में, विशेष रूप से क्रोम आप डेवलपर टूल (एफ 12) खोलते हैं और कंसोल देखते हैं।

आपको अपने ऑब्जेक्ट का एक अच्छा विस्तार योग्य दृश्य मिलेगा और आप इसका निरीक्षण कर सकते हैं।

+0

यह अनिर्धारित दिखाता है :( –

2

उपयोगकर्ता Spokey मुझे इस तकनीक jsFiddle here का उपयोग कर जो, बुनियादी तर्क किया जा रहा है एक formData वस्तु में मान "देख" करने में सक्षम होने में बहुत आसान हो गया है करने के लिए पर डाल दिया:

function submitFormFunction() { 
//create formData object 
var myFormData = new FormData(); 
// get the values from some input fields 
var myKey1 = $("input[name='my_field_one']").val(); 
var myKey2 = $("input[name='my_field_two']").val(); 
// append the values to the formData object, whilst also defining their key names 
myFormData.append("my_field_one",myKey1); 
myFormData.append("my_field_two",myKey2); 
// mock implementation - in order to view what is being sent 
var xhr = new XMLHttpRequest; 
xhr.open('POST', '/echo/html/', true); 
xhr.send(myFormData); 
} 

बस रखना ' फायरबग में नेट 'टैब खुलता है और आप मान देख पाएंगे।

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