2013-07-18 7 views
5

के साथ फ़ॉर्म भेजें मेरे पास कई इनपुट और अन्य फ़ील्ड के साथ एक फॉर्म है।jQuery AJAX, इनपुट प्रकार फ़ाइल और जेसन

मैं एक बटन को बचाने के लिए है, और जब मैं क्लिक करें, मैं jQuery के साथ ajax के साथ फार्म भेज:

$.ajax({ 
     type:  "POST", 
     dataType: "json", 
     url:  $('#ajaxUrl').val(), 
     data:  "action=save&" + form.serialize() 
}); 

तो, जब मैं पाठ की तरह ही सरल इनपुट है, चयन आदि .. यह ठीक है। लेकिन अगर मेरे पास इनपुट प्रकार फ़ाइल है, तो मैं अपनी फाइल को पुनः प्राप्त नहीं कर सकता। $ _FILES हमेशा खाली है।

मैं जितना संभव हो सके इसे कैसे कर सकता हूं?

संपादित करें: मैं एक प्लगइन :)

+0

[formData] का उपयोग करना (https://developer.mozilla.org/en-US/docs/Web/API/FormData)! – adeneo

+3

संभावित डुप्लिकेट [मैं jQuery के साथ असीमित रूप से फ़ाइलों को कैसे अपलोड कर सकता हूं?] (Http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously-with-jquery) – Martijn

+0

@ क्लेमेंट एंड्रॉइड, नहीं निश्चित रूप से, क्या यह आपकी मदद करेगा या नहीं, लेकिन कृपया http: //wordpress.stackexchange पर एक नज़र डालें।कॉम/प्रश्न/71170/कैसे करें-i-upload-import-form-input-files-via-ajax-function आपको कुछ विचार मिल सकता है। –

उत्तर

0

का उपयोग नहीं करना चाहते हैं मैं इस jQuery plugin जो upload files करने की क्षमता है का उपयोग किया है।

HTML:

<form action="file-echo2.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="myfile"><br> 
    <input type="submit" value="Upload File to Server"> 
</form> 

Javascrtipt:

$('form').ajaxForm({ 
    beforeSend: function() { 

    }, 
    uploadProgress: function(event, position, total, percentComplete) { 

    }, 
    success: function() { 

    }, 
    complete: function(xhr) { 

    } 
}); 
+1

मैं वही टिप्पणी करता हूं जैसे कि streetpc के उत्तर +1 –

1

form.serialize फ़ाइल आदानों का प्रबंधन नहीं है। formData के साथ आपको XMLHttpRequest करना होगा जैसा कि एडेनो सुझाव देता है, example usage here देखें। पुराने ब्राउज़र के लिए, iframe का उपयोग करके समाधान और iframe के साथ फ़ॉर्म को पोस्ट के रूप में पोस्ट करना है। कुछ jquery प्लगइन्स आपके लिए यह सब कुछ करेंगे, जैसे, कहें, JQuery-File-Upload (लेकिन बहुत से अन्य मौजूद हैं)।

+0

आईई 10 में फॉर्मडाटा शुरू करने के लिए समर्थन, यही कारण है कि मैं एक प्लगइन का उपयोग करने के लिए भी सुझाव दूंगा जो पुराने ब्राउज़र का समर्थन करने के लिए iframe का उपयोग करता है। +1 –

+0

हम, मेरी समस्या, मैं एक कस्टम सीएमएस पर काम करता हूं। एक नई सामग्री को सहेजने के लिए फ़ंक्शन पहले से ही लिख रहा है .. इसलिए यदि मैं सिर्फ इस स्क्रिप्ट को संपादित कर सकता हूं और सभी को फिर से लिख नहीं सकता ... ^^ –

+0

ठीक है अगर आप पुराने ब्राउज़र का समर्थन छोड़ सकते हैं, तो आप फॉर्मडाटा का उपयोग करने के लिए अपनी स्क्रिप्ट को संपादित कर सकते हैं। यदि आप नहीं कर सकते (आईई 8 और 9 छोड़ना काफी कठोर है), मुझे डर है कि आपको थोड़ा और आगे जाना होगा। लेकिन कुछ प्लगइन्स भारी भारोत्तोलन करेंगे, इसलिए यह बहुत जटिल नहीं होना चाहिए। –

0

मुझे Google पर "फॉर्मडाटा ऑब्जेक्ट्स का उपयोग करके" यह little "vanilla" framework मिला।

द्वारा इस्तेमाल किया:

AJAXSubmit(myForm); 

अगर आप console.log सिर्फ

function ajaxSuccess(){/*here*/} 

पर संशोधित() ajaxSuccess पर प्रतिक्रिया आप डेटा सर्वर को प्रस्तुत देख सकता था। यह submittedData संपत्ति पर है। ASP.NET MVC के लिए

3

कार्यान्वयन:

अपने फार्म आवरण कमाना शुरू करने के लिए:

<form id="inputform"> 
    <input class="hide" type="file" name="file" id="file" /> 
</form> 

Сreate एक क्लाइंट-हैंडलर भेजने के लिए: सर्वर पर

$("#yourButton").bind('click', function() { 
    var data = new window.FormData($('#inputform')[0]); 
    $.ajax({ 
     xhr: function() { 
      return $.ajaxSettings.xhr(); 
     }, 
     type: "POST", 
     data: data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     url: "@Url.Action("MethodName", "ControllerName")", 
     success: function() { }, 
     error: function() { }, 
    }); 
}); 

Do हैंडलर पक्ष (नियंत्रक):

public ActionResult MethodName(HttpPostedFileWrapper file) { 
    var img = Image.FromStream(file.InputStream); 
     .... 
     return ..; 
    } 

मुझे उम्मीद है कि इससे आपको समय बचाने में मदद मिलेगी;)

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