জেএসএনপি কী?
Jsonp এর সাথে মনে রাখা গুরুত্বপূর্ণ বিষয়টি এটি আসলে কোনও প্রোটোকল বা ডেটা টাইপ নয়। ফ্লাইয়ে স্ক্রিপ্ট লোড করা এবং স্ক্রিপ্টটি পৃষ্ঠাতে প্রবর্তন করা হয় এটি প্রক্রিয়াজাত করার একমাত্র উপায়। জেএসএনপি-র স্পিরিটে, এর অর্থ ক্লায়েন্ট অ্যাপ্লিকেশন / স্ক্রিপ্টে সার্ভার থেকে একটি নতুন জাভাস্ক্রিপ্ট অবজেক্ট প্রবর্তন করা।
জেএসএনপি দরকার হয় কখন?
এটি একই পাতায় অসম্পূর্ণভাবে একটি ডোমেনকে অন্যের থেকে ডেটা অ্যাক্সেস / প্রক্রিয়া করার অনুমতি দেওয়ার 1 পদ্ধতি। প্রাথমিকভাবে, এটি সিওআরএস (ক্রস অরিজিন রিসোর্স ভাগ করে নেওয়া) বিধিনিষেধগুলিকে ওভাররাইড করতে ব্যবহৃত হয় যা এক্সএইচআর (এজাক্স) অনুরোধের সাথে সংঘটিত হবে। স্ক্রিপ্ট লোডগুলি CORS বিধিনিষেধের বিষয় নয়।
এটা কিভাবে সম্পন্ন করা হয়
সার্ভার থেকে একটি নতুন জাভাস্ক্রিপ্ট অবজেক্ট উপস্থাপন করা বিভিন্ন উপায়ে প্রয়োগ করা যেতে পারে, তবে সার্ভারের মধ্যে একটি 'কলব্যাক' ফাংশন বাস্তবায়নের জন্য সবচেয়ে সাধারণ অনুশীলন, এতে প্রয়োজনীয় বস্তুটি প্রবেশ করা হয়। কলব্যাক ফাংশন শুধু একটি ফাংশন আপনি ইতিমধ্যে ক্লায়েন্ট যার উপর স্থাপন করেছি স্ক্রিপ্ট আপনি কল সময়ে লোড স্ক্রিপ্ট লোড ডেটা এটি পাস প্রক্রিয়া।
উদাহরণ:
আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা কারও বাড়ির সমস্ত আইটেম লগ করে। আমার অ্যাপ্লিকেশনটি সেট আপ হয়েছে এবং আমি এখন মূল শয়নকক্ষের সমস্ত আইটেম পুনরুদ্ধার করতে চাই।
আমার আবেদন চালু আছে app.home.com
। আমার যে অ্যাপসটি থেকে ডেটা লোড করা দরকার তা চালু api.home.com
।
এটির অনুমতি দেওয়ার জন্য সার্ভারটি সুস্পষ্টভাবে সেট আপ না করা না হলে আমি এই ডেটাটি লোড করতে এজ্যাক্স ব্যবহার করতে পারি না, এমনকি পৃথক সাবডোমেনের পৃষ্ঠাগুলিও এক্সএইচআর করস বিধিনিষেধের সাপেক্ষে।
আদর্শভাবে, এক্স-ডোমেন এক্সএইচআর অনুমোদনের জন্য জিনিসগুলি সেট আপ করুন
আদর্শভাবে, যেহেতু এপিআই এবং অ্যাপ্লিকেশন একই ডোমেনে রয়েছে তাই শিরোনামগুলি সেট আপ করতে আমার অ্যাক্সেস থাকতে পারে api.home.com
। যদি আমি তা করি তবে আমি Access-Control-Allow-Origin:
প্রবেশাধিকার মঞ্জুর করে একটি শিরোনাম আইটেম যুক্ত করতে পারি app.home.com
। ধরে Access-Control-Allow-Origin: "http://app.home.com"
নিলাম শিরোনামটি নিম্নরূপে সেট আপ করা হয়েছে :, এটি JSONP সেটআপ করার চেয়ে অনেক বেশি সুরক্ষিত। এ কারণে যে app.home.com
সবকিছু তা থেকে চায় পেতে পারেন api.home.com
ছাড়া api.home.com
পুরো ইন্টারনেট CORS প্রবেশাধিকার প্রদান।
উপরের এক্সএইচআর সমাধানটি সম্ভব নয়। আমার ক্লায়েন্টের স্ক্রিপ্টে জেএসএনপি সেটআপ করুন: আমি যখন জেএসএনপি কল করি তখন সার্ভার থেকে পুনঃস্থাপন প্রক্রিয়া করার জন্য আমি একটি ফাংশন সেট আপ করি । :
function processJSONPResponse(data) {
var dataFromServer = data;
}
মিনি স্ক্রিপ্টকে এমন কিছু দেখাচ্ছে যাতে ফিরিয়ে আনতে সার্ভারটি সেট আপ করা দরকার "processJSONPResponse('{"room":"main bedroom","items":["bed","chest of drawers"]}');"
এটির মতো কোনও কিছু //api.home.com?getdata=room&room=main_bedroom
বলা হয়ে থাকলে এটি এমন স্ট্রিং ফেরত দেওয়ার জন্য নকশাকৃত হতে পারে ।
তারপরে ক্লায়েন্ট যেমন একটি স্ক্রিপ্ট ট্যাগ সেট আপ করে:
var script = document.createElement('script');
script.src = '//api.home.com?getdata=room&room=main_bedroom';
document.querySelector('head').appendChild(script);
এটি স্ক্রিপ্টটি লোড করে এবং তত্ক্ষণাত window.processJSONPResponse()
সার্ভারের দ্বারা লিখিত / প্রতিধ্বনি / মুদ্রিত হিসাবে কল করে। ফাংশনটির প্যারামিটার হিসাবে পাস করা ডেটা এখন dataFromServer
স্থানীয় ভেরিয়েবলে সঞ্চিত এবং আপনি যা প্রয়োজন তা এটি করতে পারেন।
পরিষ্কার কর
ক্লায়েন্টের একবার ডেটা, অর্থাৎ ie স্ক্রিপ্টটি ডিওমে যুক্ত হওয়ার সাথে সাথেই স্ক্রিপ্টের উপাদানটি ডিওএম থেকে সরানো যেতে পারে:
script.parentNode.removeChild(script);