2015-06-29 6 views
6

हमारे पास JSON उत्सर्जित एक आरईएसटी एपीआई है जहां से हम स्रोत डेटा (AJAX का उपयोग कर) कर सकते हैं। हम क्या करना चाहते हैं वह AJAX कॉल करने में सक्षम होना है जहां प्रत्येक कॉल डेटा का एक छोटा हिस्सा प्राप्त करता है (5000 पंक्तियां या उससे भी कहें), और फिर इसे ब्राउज़र पर एक CSV फ़ाइल में डाउनलोड के रूप में लिखा गया है।जावास्क्रिप्ट में फ़ाइल डाउनलोड में AJAX आउटपुट को कैसे स्ट्रीम करें?

ऐसा लगता है कि अगर हमारे पास जेएस मेमोरी में सभी डेटा है, तो इसे CSV फ़ाइल में लिखना मुश्किल नहीं है, लेकिन अगर हम 100 के रिकॉर्ड लिखना चाहते हैं, तो हमें एक शॉट में सभी 100K लाने के लिए मजबूर होना पड़ता है और फिर फ़ाइल को एक बार में उत्पादित करें।

इसके बजाए, हमें लगता है कि यह सर्वर और क्लाइंट दोनों पर छोटे भाग डाउनलोड करने और इसे फ़ाइल डाउनलोड में स्ट्रीम करने के लिए बहुत अधिक विनम्र होगा। क्या इसे करने का कोई तरीका है?

(हम इस समय jQuery 2.0.0 का उपयोग कर रहे हैं, लेकिन एक अलग लाइब्रेरी का उपयोग कर इस करवाने के लिए कोई आपत्ति नहीं है)

+0

फ़ाइल के रूप में स्ट्रीम डाउनलोड करने के लिए छुपा आईफ्रेम का उपयोग क्यों नहीं करना है? http://stackoverflow.com/questions/16799483/using-jquery-and-iframe-to-download-a-file – Henrik

+0

@ हेनरिक यह काम करता है, इसके बाद मेरे पास जेएस मेमोरी में सभी सामग्री है। मैं fetch-> writeout-to-file-> लाने के चक्र करना चाहता हूं। – Shreeni

+0

? यह जेएस मेमोरी में कभी प्रवेश नहीं करता है .. जेएस बस स्रोत को आईफ्रेम को इंगित करके डाउनलोड शुरू करता है। ब्राउज़र डाउनलोड का ख्याल रखता है, और सर्वर नेटवर्क संकुल में फ़ाइल को खंडित करने का ख्याल रखता है - या क्या मैंने इस सवाल को पूरी तरह गलत समझा है? http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery – Henrik

उत्तर

1

मूल रूप से आप रिकॉर्ड की पेजिंग के लिए देख रहे हैं ... इस के लिए आप कर सकते हैं

  1. डेटाबेस
  2. में रिकॉर्ड की कुल संख्या का पता लगाएं से अपने रिकॉर्ड/कॉल का कोई
  3. सभी डेटा अलग-अलग कॉल
से आने वाले मर्ज विभाजित 10

एकाधिक कॉल jQuery का उपयोग कर बनाने के लिए आप इस

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2) { 
    // a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively. 
    // Each argument is an array with the following structure: [ data, statusText, jqXHR ] 
    var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It" 
    if (/Whip It/.test(data)) { 
    alert("We got what we came for!"); 
    } 
}); 

कोड में देखते हैं कई ajax कॉल की तरह है और पिछले यह विलय डेटा पर कर सकते हैं ... कि आप सर्वर साइड पर एक ही बात करता है, तो आप कर रहे हैं करने के लिए टीपीएल (टास्क पेरेलेल लाइब्रेरी) से सी # का उपयोग करना अच्छा विकल्प है ... प्रत्येक कॉल के लिए आपको पेज नंबर

+0

यह अभी भी मुझे जेएस मेमोरी में सभी सामग्रियों को प्रभावी रूप से स्टोर करने की आवश्यकता होगी, जो मैं पहले स्थान से बचाना चाहता हूं। – Shreeni

+0

मैं fetch-> writeout-to-file-> लाने के चक्र करना चाहता हूं .. – Shreeni

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