सबसे सरल और सबसे मज़बूत तरीका, जो मैंने पिछले दिनों में किया है, वह है कि आप अपने फॉर्म के साथ एक छिपे हुए iFrame टैग को लक्षित करें - फिर वह पृष्ठ को पुनः लोड किए बिना iframe के भीतर सबमिट करेगा।
यदि आप HTML के अलावा किसी प्लगइन, जावास्क्रिप्ट या "जादू" के किसी अन्य रूप का उपयोग नहीं करना चाहते हैं। बेशक आप इसे जावास्क्रिप्ट के साथ जोड़ सकते हैं या आपके पास क्या है ...
<form target="iframe" action="" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
<iframe name="iframe" id="iframe" style="display:none" ></iframe>
आप onLoad
सर्वर त्रुटियों या सफलता प्रतिक्रियाओं के लिए iframe की सामग्री भी पढ़ सकते हैं और फिर उपयोगकर्ता को आउटपुट दे सकते हैं।
Chrome, iFrames और onLoad
-नोट- आपको केवल यह पढ़ने की ज़रूरत है कि यदि आप अपलोडिंग / डाउनलोड करते समय UI ब्लॉकर को सेटअप करने में रुचि रखते हैं
वर्तमान में जब फ़ाइलें स्थानांतरित करने के लिए उपयोग किया जाता है तो क्रोम iframe के लिए onLoad ईवेंट को ट्रिगर नहीं करता है। फ़ायरफ़ॉक्स, IE और एज सभी फ़ाइल स्थानांतरण के लिए ऑनलोड घटना को आग लगाते हैं।
क्रोम के लिए काम करने का एकमात्र उपाय मुझे कुकी का उपयोग करना था।
अपलोड / डाउनलोड शुरू होने पर मूल रूप से ऐसा करने के लिए:
- [ग्राहक पक्ष] कुकी के अस्तित्व की तलाश के लिए एक अंतराल शुरू करें
- [सर्वर साइड] फ़ाइल डेटा के साथ आपको जो कुछ भी करना है वह करें
- [सर्वर साइड] क्लाइंट साइड अंतराल के लिए कुकी सेट करें
- [क्लाइंट साइड] इंटरवल कुकी को देखता है और इसे ऑनलोड इवेंट की तरह उपयोग करता है। उदाहरण के लिए आप एक यूआई अवरोधक शुरू कर सकते हैं और फिर ओनलॉड (या जब कुकी बनी है) आप यूआई अवरोधक को हटा सकते हैं।
इसके लिए कुकी का उपयोग बदसूरत है, लेकिन यह काम करता है।
मैंने क्रोम के लिए इस मुद्दे को संभालने के लिए एक jQuery प्लगइन बनाया, जब आप डाउनलोड कर सकते हैं, तो आप यहां पा सकते हैं
https://github.com/ArtisticPhoenix/jQuery-Plugins/blob/master/iDownloader.js
एक ही मूल प्रिंसिपल अपलोड करने के लिए लागू होता है, साथ ही साथ।
डाउनलोडर का उपयोग करने के लिए (जेएस को शामिल करें, जाहिर है)
$('body').iDownloader({
"onComplete" : function(){
$('#uiBlocker').css('display', 'none'); //hide ui blocker on complete
}
});
$('somebuttion').click( function(){
$('#uiBlocker').css('display', 'block'); //block the UI
$('body').iDownloader('download', 'htttp://example.com/location/of/download');
});
और फ़ाइल डेटा को स्थानांतरित करने से पहले सर्वर की तरफ, कुकी बनाएं
setcookie('iDownloader', true, time() + 30, "/");
प्लगइन कुकी को देखेगा, और फिर onComplete
कॉलबैक को ट्रिगर करेगा ।