আমার কাছে একটি jquery- ভিত্তিক একক পৃষ্ঠার ওয়েবঅ্যাপ রয়েছে। এটি এজেএক্স কলগুলির মাধ্যমে একটি রেস্টস্টুল ওয়েব সার্ভিসের সাথে যোগাযোগ করে।
আমি নিম্নলিখিতগুলি সম্পাদন করার চেষ্টা করছি:
- একটি POST জমা দিন যাতে একটি REST url এ JSON ডেটা রয়েছে।
- যদি অনুরোধটি কোনও JSON প্রতিক্রিয়া নির্দিষ্ট করে, তবে জেএসএন ফিরে আসবে।
- যদি অনুরোধটি একটি পিডিএফ / এক্সএলএস / ইত্যাদি প্রতিক্রিয়া নির্দিষ্ট করে, তবে একটি ডাউনলোডযোগ্য বাইনারি ফিরে আসে।
আমার এখন 1 & 2 কাজ করছে এবং ক্লায়েন্ট jquery অ্যাপ্লিকেশনটি JSON ডেটার ভিত্তিতে DOM উপাদান তৈরি করে ওয়েব পৃষ্ঠায় ফিরে আসা ডেটা প্রদর্শন করে। ওয়েব-সার্ভিস দৃষ্টিকোণ থেকে আমার কাছে # 3 কাজ করছে, এর অর্থ এটি যদি সঠিক JSON পরামিতি দেওয়া হয় তবে এটি একটি বাইনারি ফাইল তৈরি এবং ফিরিয়ে আনবে। তবে আমি ক্লায়েন্ট জাভাস্ক্রিপ্ট কোডে # 3 সাথে ডিল করার সর্বোত্তম উপায় সম্পর্কে নিশ্চিত নই।
এইভাবে একটি অজ্যাক্স কল থেকে কোনও ডাউনলোডযোগ্য ফাইল ফিরে পাওয়া সম্ভব? ফাইলটি ডাউনলোড এবং সংরক্ষণ করার জন্য ব্রাউজারটি কীভাবে পাব?
$.ajax({
type: "POST",
url: "/services/test",
contentType: "application/json",
data: JSON.stringify({category: 42, sort: 3, type: "pdf"}),
dataType: "json",
success: function(json, status){
if (status != "success") {
log("Error loading data");
return;
}
log("Data loaded!");
},
error: function(result, status, err) {
log("Error loading data");
return;
}
});
সার্ভারটি নিম্নলিখিত শিরোনামগুলির সাথে প্রতিক্রিয়া জানায়:
Content-Disposition:attachment; filename=export-1282022272283.pdf
Content-Length:5120
Content-Type:application/pdf
Server:Jetty(6.1.11)
আর একটি ধারণা হ'ল পিডিএফ তৈরি করা এবং এটি সার্ভারে সঞ্চয় করা এবং জেএসওএন ফিরিয়ে দেওয়া যাতে ফাইলটিতে একটি URL অন্তর্ভুক্ত থাকে includes তারপরে, এজ্যাক্স সাফল্যের হ্যান্ডেলারটিতে নীচের মতো কিছু করার জন্য আর একটি কল জারি করুন:
success: function(json,status) {
window.location.href = json.url;
}
তবে তার মানে হল সার্ভারে আমার একাধিক কল করা দরকার এবং আমার সার্ভারে ডাউনলোডযোগ্য ফাইলগুলি তৈরি করতে হবে, সেগুলি কোথাও সংরক্ষণ করতে হবে এবং পরে পর্যায়ক্রমে সেই সঞ্চয় স্থানটি পরিষ্কার করতে হবে।
এটি সম্পাদন করার জন্য অবশ্যই একটি সহজ উপায় থাকতে হবে। ধারনা?
সম্পাদনা: aj .জ্যাক্সের জন্য দস্তাবেজগুলি পর্যালোচনা করার পরে, আমি দেখতে পাচ্ছি যে প্রতিক্রিয়া ডেটা টাইপ কেবলমাত্র একটি হতে পারে xml, html, script, json, jsonp, text
, তাই আমি অনুমান করছি যে কোনও বাইনারি ফাইল এম্বেড না করে অ্যাজাক্স অনুরোধ ব্যবহার করে সরাসরি কোনও ফাইল ডাউনলোড করার উপায় নেই is @ উইনাইসি উত্তরে প্রস্তাবিত ডেটা ইউআরআই স্কিম (যা আমি কিছু করতে চাই না)।
সুতরাং আমি অনুমান করি আমার বিকল্পগুলি হ'ল:
এজ্যাক্স ব্যবহার করবেন না এবং পরিবর্তে একটি ফর্ম পোস্ট জমা দিন এবং আমার JSON ডেটা ফর্মের মানগুলিতে এম্বেড করুন। লুকিয়ে থাকা আইফ্রেমেস এবং এই জাতীয়গুলির সাথে সম্ভবত গণ্ডগোলের প্রয়োজন হবে।
এজাক্স ব্যবহার করবেন না এবং এর পরিবর্তে আমার জেএসওএন ডেটাটিকে একটি জিআরআর অনুরোধ তৈরি করতে ও একটি ইউআরএল-এ Windows.location.href সেট করার জন্য কোয়েরি স্ট্রিংয়ে রূপান্তর করুন। অ্যাপ্লিকেশন ইউআরএল থেকে ব্রাউজারটি পরিবর্তন থেকে রক্ষা করতে আমার ক্লিক হ্যান্ডলারে ইভেন্ট.প্রিভেন্টডেফল্ট () ব্যবহার করার প্রয়োজন হতে পারে।
উপরের আমার অন্যান্য ধারণাটি ব্যবহার করুন তবে @naikus উত্তরের পরামর্শ দিয়ে বর্ধিত করেছেন। এমন কিছু প্যারামিটারের সাথে AJAX অনুরোধ জমা দিন যা ওয়েব-পরিষেবাটি জানতে দেয় যে এটি একটি এজাক্স কলের মাধ্যমে আহ্বান করা হচ্ছে। যদি অজ্যাক্স কল থেকে ওয়েব পরিষেবাটি কল করা হয় তবে উত্পন্ন উত্সটিতে কেবল একটি URL সহ জেএসএনকে ফিরিয়ে দিন। যদি উত্সটি সরাসরি ডাকা হয়, তবে আসল বাইনারি ফাইলটি ফিরিয়ে দিন।
আমি এটি সম্পর্কে যত বেশি চিন্তা করি, ততই আমি শেষ বিকল্পটি পছন্দ করি। এইভাবে আমি অনুরোধ (উত্পন্ন করার সময়, ফাইলের আকার, ত্রুটি বার্তাগুলি ইত্যাদি) সম্পর্কে তথ্য ফিরে পেতে পারি এবং ডাউনলোড শুরু করার আগে আমি সেই তথ্যটিতে কাজ করতে পারি। ডাউনসাইড হ'ল সার্ভারে অতিরিক্ত ফাইল ম্যানেজমেন্ট।
এটি সম্পাদন করার অন্য কোনও উপায়? এই পদ্ধতিগুলির সম্পর্কে কোনও উপকার / ধারণা সম্পর্কে আমার সচেতন হওয়া উচিত?
url = 'http://localhost/file.php?file='+ $('input').val(); window.open(url);
একই ফলাফল পাওয়ার সহজ উপায়। পিএইচপি ফাইলে শিরোনামটি রাখুন। কোনও