2010-01-07 16 views
5

मुझे आश्चर्य है कि मैं jQuery AJAX की तरह यह कैसे करूं। अभी मेरे पास एक jQuery UI संवाद बॉक्स पॉपअप है और इसमें एक HTML इनपुट फ़ाइल है।jQuery के माध्यम से फ़ाइल कैसे अपलोड करें?

अब जब उपयोगकर्ता आयात पर क्लिक करता है तो मैं jQuery के साथ सर्वर पर AJAX पोस्ट करना चाहता हूं।

मुझे यकीन नहीं है कि मेरे एक्शन व्यू में फ़ाइल को कैसे पास किया जाए।

अभी मैंने इसे एक पूरा पोस्ट वापस कर दिया है तो मैं इस

<% using (Html.BeginForm("Import", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{%> 
    <br /> 
    <p><input type="file" id="file" name="file" size="23 accept="text/calendar"></p><br /> 
    <p><input type="submit" value="Upload file" /></p>   

<% } %> 

तब मेरे नियंत्रक में है

public ActionResult Import(HttpPostedFileBase file) 

तो मुझे यकीन है कि jQuery और साथ एक HttpPostedFileBase में पास करने के लिए कैसे नहीं कर रहा हूँ jQuery में enctype = "multipart/form-data" कैसे सेट करें।

संपादित

ठीक है अच्छी तरह से jQuery फार्म प्लगइन जाने का रास्ता हो रहा है।

$('#frm_ImportCalendar').livequery(function() 
{ 
    var options = { 
     dataType: 'json', 
     success: function(response) 
     { 
      alert(response); 
     } 
    }; 

    $(this).ajaxForm(options); 
}); 

मैं सोच रहा था कि मेरा जेसन क्यों काम नहीं कर रहा था लेकिन किसी ने बताया कि आप इसका उपयोग नहीं कर सकते हैं। मैं दूसरे लिंक की जांच कर रहा हूं जहां कोई जेसन का उपयोग करने में सक्षम था।

मुझे यकीन नहीं है कि क्यों लेक में इस्तेमाल किया गया था। AJAX सबमिट विधि से पहले सबमिट करें।

संपादित

मैं अपने सरणी शब्दकोश वापस जाने के लिए फाइल अपलोड json परिणाम बदल सकता है?

 Dictionary<string, string> result = new Dictionary<string, string>(); 
     result.Add("Msg", "Success!!"); 
     result.Add("Body", calendarBody); 

// how can I change this? 
    return new FileUploadJsonResult { Data = new { message = string.Format("{0} uploaded successfully.", System.IO.Path.GetFileName(file.FileName)) } }; 

उत्तर

4

jQuery फॉर्म प्लगइन का उपयोग करके, आप एक async फ़ाइल अपलोड कर सकते हैं। चेक-आउट नीचे दिए गए लिंक,

jQuery फार्म प्लगइन - कोड नमूने - फ़ाइल अपलोड http://jquery.malsup.com/form/#file-upload

गुड लक!

0

जैसा कि डोमिनिक द्वारा सुझाया गया है, jQuery Form plugin का उपयोग करें। आपके द्वारा पहले से बनाए गए फॉर्म को पहले ही सही तरीके से काम करना चाहिए। बस इसे पहचानने के लिए एक आईडी जोड़ें:

<% using (Html.BeginForm("Import", "Controller", FormMethod.Post, new { id = "asyncForm", enctype = "multipart/form-data" })) 

और डेटा पोस्ट करने के लिए jQuery फार्म का उपयोग करें:

$(document).ready(function(){ 
    $('#asyncForm').submit(function(){ 
     $(this).ajaxSubmit({ 
      beforeSubmit: function(){ 
       //update GUI to signal upload 
      } 
      data: { additional = 'value' }, 
      dataType: 'xml', 
      success: function(xml){ 
       //handle successful upload 
      } 
     }); 
    }); 
}); 

ध्यान दें कि रूपों में वापसी डेटाप्रकार कि अपलोड फ़ाइलें JSON नहीं कर सकते हैं। अपने नियंत्रक की विधि में प्रतिक्रिया के रूप में एक्सएमएल या एचटीएमएल का प्रयोग करें।

+0

मैं बस यहाँ आ रहा था पूछने के लिए क्यों यह JSON नहीं लौटेगा lol कॉलबैक फ़ंक्शन में अपना संदेश मिलता है। मैंने कुछ ऐसा ही किया लेकिन आईडी आईडी निर्दिष्ट नहीं है। सबमिट करें। मेरे पास अब तक के लिए संपादन देखें। – chobo2

+0

जावास्क्रिप्ट जेएसओएन को सुरक्षा कारणों से फ़ाइल अपलोड करने वाले अनुरोधों के लिए डेटा प्रारूप के रूप में स्वीकार नहीं कर सकता है (यह jQuery फॉर्म वेबपृष्ठ पर प्रलेखित है)। मेरा सुझाव है कि आप एक्सएमएल का उपयोग करें जो _almost_ को jQuery के साथ JSON के रूप में उपयोग करने के लिए सरल है ... या शायद न्यूलाइन द्वारा अलग किए गए सादा पाठ में मूल्य। मैंने इस्तेमाल किया .ajax स्पष्ट रूप से सबमिट करें क्योंकि मैंने अपने स्वयं के प्रोजेक्ट के कुछ कोड से उदाहरण लिया है जहां मैं फॉर्म के साथ कुछ और सामान करता हूं। वैसे भी अपने कोड के व्यावहारिक रूप से समकक्ष होना चाहिए। – LorenzCK

+0

वैसे यह एक्सएमएल कैसा दिखता है। मैंने अपना डिक्शनरी संग्रह पोस्ट किया है जिसे मैं एक जेसन परिणाम में परिवर्तित करता हूं, मैं इसे एक्सएमएल में कैसे परिवर्तित कर सकता हूं। – chobo2

0

मैं jQuery Form plugin का उपयोग करके AJAX के माध्यम से एक फ़ाइल अपलोड करने में सक्षम था और here वर्णित एक कस्टम जेसनरसेट क्लास।

इस का प्रयोग करें अपने शब्दकोश

return new FileUploadJsonResult { Data = new { Msg = "Success!!", Body = calendarBody } }; 

की तरह कुछ वापस जाने के लिए और

success: function(result) { 
    $("#ajaxUploadForm").unblock(); 
    $("#ajaxUploadForm").resetForm(); 
    alert(result.Msg); 
} 
+0

$ .growlUI क्या है (शून्य, परिणाम.मेसेज) ;? मुझे यकीन नहीं है कि growlUI क्या है और यदि ऐसा कुछ है तो मुझे चाहिए। क्या मुझे आईफ्रेम को सच करना है? – chobo2

+0

इसके अलावा जेसन कुंजी और मूल्य क्या है? क्या यह डेटा या संदेश है? संपादित देखें। – chobo2

+0

हां, iframe सच होना चाहिए। $ .growlUI आवश्यक नहीं है, यह सिर्फ एक विशेष एनिमेटेड अधिसूचना है। –

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