2013-05-15 4 views
6

मैं अपनी वेबसाइट के लिए AJAX का उपयोग कर रहा हूँ। मैंने सफलतापूर्वक jQuery.ajax() का उपयोग सर्वर पर फ़ाइल को अतुल्य रूप से अपलोड करने के लिए किया है। मैं Dajax और Dajaxice का उपयोग कर रहा हूं इसलिए मैं इन एप्लिकेशन को फ़ाइल अपलोड के लिए भी उपयोग करने की योजना बना रहा हूं। मैंने this उदाहरण की कोशिश की। यह ठीक काम कर रहा है। लेकिन अगर मैं अपने एचटीएमएल फॉर्म में फ़ाइल फ़ील्ड जोड़ता हूं, तो यह सर्वर पर फाइल नहीं भेजता है। मेरा एचटीएमएल फॉर्मDajaxice का उपयोग कर फ़ाइल डेटा कैसे भेजना है?

<form id="myform" action="/file/" method="post" enctype="multipart/form-data"> 
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='AaSmyBEwQLSD3YghRAD9Cf2uxEjzESUe' /></div> 
<p><label for="id_docfile">Select a file</label> max. 42 megabytes</p> 
<p><input type="file" name="docfile" id="id_docfile" /></p> 
<p><input type="submit" value="Upload" /></p> 
</form> 

इस प्रश्न को कई जगहों पर पूछा गया है लेकिन कभी जवाब नहीं दिया गया है।

+0

किसी को भी इस जवाब देने में सक्षम हो गया है/एक समाधान खोजने? – scriptdiddy

+0

@scriptdiddy अभी तक नहीं! – Aryaveer

उत्तर

1

अफैक वर्तमान में फाइल अपलोड करने के लिए दाजैक्स/डाजैक्सिस के भीतर कोई प्रावधान नहीं है।

मैंने कुछ परियोजनाओं में दाजैक्स का उपयोग किया है और blueimp/jquery-file-upload और एक django व्यू का उपयोग करके इसे गोल किया है जो अपलोड फ़ाइल का एक पोस्ट स्वीकार करता है और क्लाइंट को JSON स्ट्रिंग देता है।

यह कम से कम सही समाधान से कम नहीं है क्योंकि jquery-file-upload बटन सामान्य HTML फॉर्म तत्वों से अलग स्टाइल किया गया है, यह jQuery-UI के उपयोग से पूरे फॉर्म को स्टाइल करना संभव है, हालांकि यह बहुत अधिक है काम।

दोनों, dwr जो जावा के लिए बहुत अधिक dajax है, और tasty pie django के लिए फ़ाइल अपलोड करने की पेशकश करते हैं, इसलिए सिद्धांत में इसे लागू करना संभव होना चाहिए।

यदि कोई उन्हें उपयोगी लगे तो मुझे अपने AJAX समाधान का नमूना पोस्ट करने में खुशी होगी।

1

मुझे हाल ही में इस समस्या का सामना करना पड़ा है। तो, मैंने थोड़ा खोद लिया है और कुछ जवाब खोजे हैं।

यह ठीक काम कर रहा है। लेकिन अगर मैं अपने एचटीएमएल फॉर्म में फ़ाइल फ़ील्ड जोड़ता हूं, तो यह सर्वर पर फाइल नहीं भेजता है।

दस्तावेज़ उदाहरण में serialize() विधि का उपयोग किया गया है। लेकिन jQuery doc के अनुसार:

फ़ाइल चयन तत्वों से डेटा क्रमबद्ध नहीं है।

इसके अलावा, AJAX फ़ाइल अपलोड करने का कोई स्पष्ट तरीका नहीं है, क्योंकि जेएस के पास क्लाइंट ब्राउज़र के बाहर तक पहुंच नहीं है। इसलिए, मुझे नहीं लगता कि dajaxice का उपयोग करना संभव है।

सबसे आसान हैक, मैंने पाया अदृश्य आइफ्रेम target विकल्प का उपयोग करने के लिए प्रपत्र पोस्ट करने के लिए है:

<form method='POST' action='/upload' enctype='multipart/form-data' target='submit-iframe'>

हां, तो केवल आइफ्रेम ताजा हो जाएगा। load() ईवेंट को पकड़ने से डेटा प्राप्त करने से आप जेएस का उपयोग कर सकते हैं।

अधिक विस्तृत प्रक्रिया का वर्णन किया here

+1

आईफ्रेम बनाना और उसके भीतर से एक फॉर्म पोस्ट करना इस तरह से है कि सभी गैर फ़्लैश अजाक्स/जावास्क्रिप्ट समाधान काम करते हैं, dwr वही काम करता है, देखें: http://directwebremoting.org/dwr-demo/simple/upload.html ।यह पाइथन कोड के साथ deserialize (स्वादिष्ट पाई में इस्तेमाल किया जाता है) के साथ अंत में फ़ाइल dajaxice के लिए एक आसान जोड़ देगा। –

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