এইভাবে আমি এই সমস্যাটি সমাধান করি। এই পোস্টে
জোনাথন সংশোধনীর উত্তর আমাকে অনেক সাহায্য করেছে।
নীচের উদাহরণটি সরল করা হয়েছে।
আরও তথ্যের জন্য, উপরের উত্স কোডটি একটি জিকুয়েরি অ্যাজাক্স অনুরোধ (জিইটি, পোষ্ট, পুট ইত্যাদি) ব্যবহার করে একটি ফাইল ডাউনলোড করতে সক্ষম । এটি, JSON হিসাবে প্যারামিটারগুলি আপলোড করতে এবং সামগ্রী / ধরণের অ্যাপ্লিকেশন / জেসনকে (আমার ডিফল্ট) পরিবর্তন করতে সহায়তা করে ।
এইচটিএমএল উৎস:
<form method="POST">
<input type="text" name="startDate"/>
<input type="text" name="endDate"/>
<input type="text" name="startDate"/>
<select name="reportTimeDetail">
<option value="1">1</option>
</select>
<button type="submit"> Submit</button>
</form>
দুটি ইনপুট পাঠ্য সহ একটি সাধারণ ফর্ম, একটি নির্বাচন করুন এবং একটি বোতাম উপাদান।
জাভাস্ক্রিপ্ট পৃষ্ঠা উৎস:
<script type="text/javascript" src="JQuery 1.11.0 link"></script>
<script type="text/javascript">
$(document).on("ready", function(){
$("form button").on("click", function (event) {
event.stopPropagation();
new AjaxDownloadFile({
url: "url that returns a file",
data: JSON.stringify($("form").serializeObject())
});
return false;
});
});
</script>
বোতাম ক্লিকের একটি সহজ ইভেন্ট। এটি একটি অ্যাজ্যাক্সডাউনলোড ফাইল অবজেক্ট তৈরি করে। অ্যাজাক্সডাউনলোড ফাইল শ্রেণীর উত্স নীচে রয়েছে।
AjaxDownloadFile বর্গ উৎস:
var AjaxDownloadFile = function (configurationSettings) {
this.settings = {
url: "",
type: "POST",
headers: {
"Content-Type": "application/json; charset=UTF-8"
},
data: {},
onSuccessStart: function (response, status, xhr, self) {
},
onSuccessFinish: function (response, status, xhr, self, filename) {
},
onErrorOccured: function (response, status, xhr, self) {
}
};
this.download = function () {
var self = this;
$.ajax({
type: this.settings.type,
url: this.settings.url,
headers: this.settings.headers,
data: this.settings.data,
success: function (response, status, xhr) {
self.settings.onSuccessStart(response, status, xhr, self);
var filename = "";
var disposition = xhr.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, "");
}
var type = xhr.getResponseHeader("Content-Type");
var blob = new Blob([response], {type: type});
if (typeof window.navigator.msSaveBlob !== "undefined") {
window.navigator.msSaveBlob(blob, filename);
} else {
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
if (filename) {
var a = document.createElement("a");
if (typeof a.download === "undefined") {
window.location = downloadUrl;
} else {
a.href = downloadUrl;
a.download = filename;
document.body.appendChild(a);
a.click();
}
} else {
window.location = downloadUrl;
}
setTimeout(function () {
URL.revokeObjectURL(downloadUrl);
}, 100);
}
self.settings.onSuccessFinish(response, status, xhr, self, filename);
},
error: function (response, status, xhr) {
self.settings.onErrorOccured(response, status, xhr, self);
}
});
};
{
$.extend(this.settings, configurationSettings);
this.download();
}
};
আমি আমার জেএস লাইব্রেরিতে যুক্ত করতে এই ক্লাসটি তৈরি করেছি। এটি পুনরায় ব্যবহারযোগ্য। আশা করি এইটি কাজ করবে.