2009-10-08 13 views
6

मैं अपने आवेदन में गतिशील फ़ाइल डाउनलोड कर रहा हूं, iframes का उपयोग करके AJAX अनुकरण कर रहा हूं। मैं जो कर रहा हूं, जब डाउनलोड अनुरोध किया जाता है, तो मैं एक गतिशील अदृश्य आईफ्रेम बनाउंगा, और डाउनलोड यूआरएल के रूप में अपने आईफ्रेम का स्रोत सेट करूंगा। मैं फ़ाइल को सफलतापूर्वक डाउनलोड करने में सक्षम हूं, लेकिन आवश्यकता डाउनलोड करना है डाउनलोड शुरू होने के बाद संकेतक और डाउनलोड संवाद के तुरंत बाद इसे समाप्त करना चाहिए। मैंने आईफ्रेम निर्माण के बाद डाउनलोड संकेतक को दिखाने के लिए वापस कॉल किया, जो सफलतापूर्वक काम कर रहा है, और आईफ्रेम के 'ऑनलोड' पर एक और तरीका प्रदान करता है, उम्मीद है यह डाउनलोड किया जाएगा, जब डाउनलोड संवाद आता है। लेकिन दुर्भाग्य से, यह काम नहीं कर रहा है, और इसके कारण डाउनलोड पूर्ण होने के बाद भी, मेरी प्रगति संकेतक अभी भी वहां है। मैं इसे हटाने में सक्षम नहीं हूं। तब मुझे एहसास हुआ कि चूंकि सामग्री का प्रकार एचटीएमएल नहीं है, इसलिए इसे एक अलग प्रक्रिया द्वारा परोसा जाएगा, जो डाउनलोड संवाद की ओर जाता है और इसके कारण मेरी ऑनलोड विधि कभी नहीं बुलाई जाती है। कृपया मुझे इसके लिए एक समाधान पता है।अजाक्स फ़ाइल डाउनलोड जारी करें

उत्तर

1

आप ग्राहक में एक टाइमर शुरू कर देना चाहिए जब डाउनलोड अनुरोध जो एक निर्दिष्ट अंतराल पर iframe की राज्य परीक्षण किया जाता है:

if ((iframe.document && iframe.document.readyState == 'complete') 
    || iframe.contentDocument) 
{ 
    stopTimer(); 
    closePopupDialog(); 
} 
+0

ऊपर से एक समाधान के बहुत करीब है, लेकिन मेरे मामले में, तैयार करने के बाद भी तैयारस्टेट कभी भी 'पूर्ण' तक नहीं पहुंच रहा था, यह 'इंटरैक्टिव' राज्य में रहा। कोई विचार क्या समस्या हो सकती है ?? – Bibin

+0

बस यह पता चला कि सामग्री-स्वभाव उसमें एक भूमिका निभाता है। ** [यह] देखें (http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when- गतिशील- लोडिंग-iframes-in-javascript। एएसपीएक्स) ** – Bibin

+0

यह विधि * दुर्भाग्य से * ब्राउज़रों में असंगत तैयार स्टार्ट व्यवहार के कारण काम नहीं करता है। उदाहरण के लिए क्रोम कभी नहीं बदलता है। –

0

आप एक फ्लैश डाउनलोड मैनेजर का उपयोग कर सकते हैं - Google उनमें से कई को प्रकट करेगा।

आपका दूसरा विकल्प वास्तविक AJAX का उपयोग करना है। बस यूआरआई डाउनलोड करने का अनुरोध करें, और जब आपको अपनी प्रतिक्रिया मिलती है, प्रतिक्रिया के बजाय प्रतिक्रिया का उपयोग करें XMLHTTPRequest ऑब्जेक्ट की टेक्स्ट विशेषता।

आपको लगता है कि लिखने के लिए हार्ड ड्राइव, जो ढीला सुरक्षा की कमी और ActiveXObject "Scripting.FileSystemObject" आप डेटा uri दृष्टिकोण का उपयोग करने में सक्षम हो सकता साथ IE में किया जा सकता है के लिए एक रास्ता आवश्यकता होगी: एक बेस 64 के साथ http://en.wikipedia.org/wiki/Data_URI_scheme एन्कोडिंग, लेकिन मुझे यकीन नहीं है कि यह काम करेगा या नहीं।

अन्यथा आप डिस्क पर AJAX के माध्यम से डाउनलोड किए गए डेटा को लिखने के लिए फ़्लैश पर वापस आ गए हैं।

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

15

मैंने jQuery File Download plugin (Demo) बनाया जो समस्या को हल करता है और कुछ अन्य अच्छी सुविधाएं प्रदान करता है। यह मूल रूप से आपको फ़ाइल डाउनलोड के लिए "पूर्ण अजाक्स-जैसा" अनुभव देता है (कॉलबैक के साथ भी पूरा) जो फ़ाइल डाउनलोड के लिए सामान्य रूप से संभव नहीं है।यह एक iframe के साथ कुछ अन्य उत्तर देने के लिए बहुत इसी तरह काम करता है, लेकिन कुछ शांत सुविधाओं है कि मैं काफी काम मिल गया है है:

  • उपयोगकर्ता एक ही पृष्ठ वे चाहे वह सफल हुआ से एक फ़ाइल डाउनलोड शुरू की कभी नहीं छोड़ देता है या उसमें कोई त्रुटि है
  • successCallback और failCallback कार्यों तुम क्या यूआई व्यवहार दोनों ही परिस्थितियों
  • jQuery UI के साथ संयोजन के रूप में में है एक डेवलपर को आसानी से उपयोगकर्ता है कि एक फ़ाइल डाउनलोड हो रहा है कह रही एक मॉडल दिखा सकते हैं मोडल भंग बारे में स्पष्ट होना करने के लिए के लिए अनुमति डाउनलोड शुरू होने के बाद या उपयोगकर्ता को एक दोस्ताना तरीके से सूचित करें कि एक त्रुटि हुई है। इसके उदाहरण के लिए Demo देखें।

यहां वचनों के साथ प्लगइन source प्लगइन का उपयोग करके एक साधारण उपयोग केस डेमो है। demo page में कई अन्य 'बेहतर यूएक्स' उदाहरण भी शामिल हैं।

$.fileDownload('some/file.pdf') 
    .done(function() { alert('File download a success!'); }) 
    .fail(function() { alert('File download failed!'); }); 
संबंधित मुद्दे