दिलचस्प पोस्ट
OpenCV में कुछ पिक्सेल आरजीबी मान एक्सेस करना NSMutablearray को NSUserDefaults में कैसे सहेजना है पोस्टबैक aspx पेज के साथ डिफ़ॉल्ट दस्तावेज़ के रूप में काम नहीं करता है किसी विशेष सबरिंग के बाद एक स्ट्रिंग प्राप्त करें हेरोकू रेल 4 में संपत्ति पाइपलाइनों के तहत फाइलों को संकलित नहीं करती है एंड्रॉइड एडीटी की स्थापना रद्द करना यह C ++ स्निपेट संकलित क्यों करता है (गैर-शून्य फ़ंक्शन किसी मान को वापस नहीं करता) MySQL "बीच" खंड शामिल नहीं है? 2 आयामी सरणी में संग्रहीत संबंधित डेटा का उपयोग करना फोर्ट्रान में उपनगरीय इलाकों के लिए आवंटन योग्य सरणियों को कैसे पारित किया जाए सी ++ क्यूटी सिग्नल और स्लॉट फायरिंग नहीं है क्यों एक वेब ब्राउज़र में PHP स्क्रिप्ट workig नहीं है? JQuery के उपयोग से एक तत्व के सभी गुण प्राप्त करें फेसबुक फैन नाम पुनर्प्राप्त करें `% में%` और `==` में अंतर

एक एजेक्स अनुरोध का उपयोग करके फ़ाइल डाउनलोड करें

जब मैं किसी बटन पर क्लिक करता हूं तो मैं "एजेक्स डाउनलोड अनुरोध" भेजना चाहता हूं, इसलिए मैंने इस तरीके से कोशिश की:

जावास्क्रिप्ट:

var xhr = new XMLHttpRequest(); xhr.open("GET", "download.php"); xhr.send(); 

download.php:

 <? header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename= file.txt"); header("Content-Transfer-Encoding: binary"); readfile("file.txt"); ?> 

लेकिन अपेक्षित रूप से काम नहीं करता है, मैं कैसे कर सकता हूं? पहले ही, आपका बहुत धन्यवाद

वेब के समाधान से एकत्रित समाधान "एक एजेक्स अनुरोध का उपयोग करके फ़ाइल डाउनलोड करें"

अप्रैल 27, 2015 को अपडेट करें

ऊपर और HTML5 दृश्य में आने के लिए डाउनलोड विशेषता है । यह फ़ायरफ़ॉक्स और क्रोम में समर्थित है, और जल्द IE11 आने के लिए। आपकी आवश्यकताओं पर निर्भर करते हुए, आप इसे AJAX अनुरोध (या window.location का उपयोग करने के बजाय) का उपयोग कर सकते हैं, जब तक कि आप जिस फ़ाइल को डाउनलोड करना चाहते हैं वह उसी साइट पर आपकी मूल रूप से है।

आप हमेशा AJAX अनुरोध / window.location को कुछ जावास्क्रिप्ट का उपयोग करके परीक्षण के लिए एक फ़ॉलबैक बना सकते हैं यदि यह download समर्थित है और यदि नहीं, तो उसे window.location को कॉल करने के लिए स्विच करना। स्थान।

मूल उत्तर

डाउनलोड के लिए संकेत करने के लिए आपको शारीरिक रूप से फ़ाइल पर नेविगेट करना होगा, इसलिए आप एक एजेएक्स अनुरोध डाउनलोड प्रॉमप्ट खोल सकते हैं। इसके बजाय, आप डाउनलोड करने के लिए नेविगेट करने के लिए एक सफल फ़ंक्शन का उपयोग कर सकते हैं। Php यह डाउनलोड संकेत खोलेगा लेकिन वर्तमान पृष्ठ को नहीं बदला जाएगा।

 $.ajax({ url: 'download.php', type: 'POST', success: function() { window.location = 'download.php'; } }); 

हालांकि इस प्रश्न का उत्तर देता है, यह सिर्फ window.location उपयोग करने के लिए बेहतर है। स्थान और window.location अनुरोध पूरी तरह से बचें।

आपको वास्तव में इसके लिए अजाक्स की ज़रूरत नहीं है। यदि आप बस "डाउनलोड.php" बटन पर href के रूप में सेट करते हैं, या, यदि यह लिंक उपयोग नहीं है:

 window.location = 'download.php'; 

ब्राउज़र को द्विआधारी डाउनलोड को पहचानना चाहिए और वास्तविक पृष्ठ को लोड नहीं करना चाहिए, बल्कि फ़ाइल को डाउनलोड के रूप में प्रदान करना है।

हो सकता है। आपके पास एक एजेक्स फ़ंक्शन के अंदर से डाउनलोड शुरू हो सकता है, उदाहरण के लिए, .csv फ़ाइल बनाई जाने के ठीक बाद।

मेरे पास एक एजेक्स फ़ंक्शन है जो किसी .csv फ़ाइल में संपर्कों के डेटाबेस को निर्यात करता है, और इसे खत्म करने के ठीक बाद, यह स्वचालित रूप से .csv फ़ाइल डाउनलोड प्रारंभ करता है। इसलिए, मेरे पास प्रतिक्रिया प्राप्त होने के बाद पाठ और सब कुछ ठीक है, मैं इस तरह ब्राउज़र को रीडायरेक्ट करता हूं:

 window.location="download.php?filename=export.csv"; 

मेरी download.php फ़ाइल इस तरह दिखती है:

 <?php $file = $_GET['filename']; header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=".$file.""); header("Content-Transfer-Encoding: binary"); header("Content-Type: binary/octet-stream"); readfile($file); ?> 

कोई पृष्ठ रिफ्रेश नहीं है और फाइल स्वतः डाउनलोड करना शुरू कर देती है।

नोट – निम्न ब्राउज़र में जांच की गई:

 Chrome v37.0.2062.120 Firefox v32.0.1 Opera v12.17 Internet Explorer v11 

ब्राउज़र को एक फ़ाइल डाउनलोड करने के लिए आपको इस तरह से अनुरोध करने की आवश्यकता है:

  function downloadFile(urlToSend) { var req = new XMLHttpRequest(); req.open("GET", urlToSend, true); req.responseType = "blob"; req.onload = function (event) { var blob = req.response; var fileName = req.getResponseHeader("fileName") //if you have the fileName header available var link=document.createElement('a'); link.href=window.URL.createObjectURL(blob); link.download=fileName; link.click(); }; req.send(); } 

मुझे स्थान पसंद है। सौदा ()

developer.mozilla.org/en-US/docs/Web/API/Location.assign

हेडर से एक फ़ाइल नाम डीकोड करना थोड़ा अधिक जटिल है …

 var filename = "default.pdf"; var disposition = req.getResponseHeader('Content-Disposition'); if (disposition && disposition.indexOf('attachment') !== -1) { var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; var matches = filenameRegex.exec(disposition); if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, ''); 

}