আমি একটি সহজ উত্তর চেষ্টা করতে যাচ্ছি:
সমস্যার ব্যাখ্যা
প্রথমত, যখন আমাদের সার্ভার থেকে কোনও পৃষ্ঠা পরিবেশন করা হয় তখন ইভেন্টগুলির প্রবাহটি বুঝতে পারি:
- প্রথম পিএইচপি চালিত হয়, এটি ক্লায়েন্টের কাছে পরিবেশন করা এইচটিএমএল তৈরি করে।
- তারপরে, এইচটিএমএল ক্লায়েন্টের কাছে পৌঁছে দেওয়া হয়, পিএইচপি এটির পরে, আমি জোর দিয়ে বলতে চাই যে কোডটি একবার সার্ভার ছেড়ে গেলে - পিএইচপি এটি দিয়ে হয়ে যায় এবং এটি আর অ্যাক্সেস করতে পারে না।
- তারপরে, জাভাস্ক্রিপ্ট সহ এইচটিএমএল ক্লায়েন্টে পৌঁছেছে, যা সেই এইচটিএমএলে জাভাস্ক্রিপ্ট কার্যকর করতে পারে।
সুতরাং সত্যিই, এখানে মূল জিনিসটি মনে রাখতে হবে যে এইচটিটিপি রাষ্ট্রহীন । একবার কোনও অনুরোধ সার্ভার ছেড়ে গেলে সার্ভারটি এটি স্পর্শ করতে পারে না। সুতরাং, এটি আমাদের বিকল্পগুলি এখানে ছেড়ে দেয়:
- পরে ক্লায়েন্ট থেকে আরও অনুরোধ প্রেরণ করুনপ্রাথমিক অনুরোধটি শেষ ।
- প্রাথমিক অনুরোধে সার্ভারের যা বলা ছিল তা এনকোড করুন।
সলিউশন
আপনার নিজের জিজ্ঞাসা করা উচিত এমন মূল প্রশ্নটি হ'ল:
আমি কি কোনও ওয়েবসাইট লিখছি বা কোনও অ্যাপ্লিকেশন?
ওয়েবসাইটগুলি মূলত পৃষ্ঠা ভিত্তিক হয় এবং পৃষ্ঠা লোডের সময়গুলি যত তাড়াতাড়ি দ্রুত হওয়া প্রয়োজন (উদাহরণস্বরূপ - উইকিপিডিয়া)। ওয়েব অ্যাপ্লিকেশনগুলি আরও এজেএক্স ভারী এবং ক্লায়েন্টের দ্রুত তথ্য (উদাহরণস্বরূপ - একটি স্টক ড্যাশবোর্ড) পেতে প্রচুর রাউন্ড ট্রিপ করে।
ওয়েবসাইট
প্রাথমিক অনুরোধটি সম্পন্ন হওয়ার পরে ক্লায়েন্টের কাছ থেকে আরও অনুরোধগুলি প্রেরণ করা ধীর গতির কারণ এটির জন্য আরও বেশি এইচটিটিপি অনুরোধের প্রয়োজন রয়েছে যার উল্লেখযোগ্য ওভারহেড রয়েছে। তদ্ব্যতীত, এটি অ্যাসিঙ্ক্রোনাসিটির প্রয়োজন কারণ একটি এজেএক্স অনুরোধটি সম্পূর্ণ হওয়ার জন্য একটি হ্যান্ডলার প্রয়োজন।
আপনার সাইটটি সার্ভার থেকে সেই তথ্য পাওয়ার জন্য কোনও আবেদন না করা না হলে আমি আর একটি অনুরোধ করার পরামর্শ দেব না ।
আপনি দ্রুত প্রতিক্রিয়া বার চান যা রূপান্তর এবং লোড সময়গুলিতে বিশাল প্রভাব ফেলে। এজ্যাক্স অনুরোধ করা এই ক্ষেত্রে প্রাথমিক আপটাইমের জন্য ধীর এবং বিনা শিবির।
সমস্যাটি সমাধান করার জন্য আপনার কাছে দুটি উপায় রয়েছে
- একটি কুকি সেট করুন - কুকিগুলি এইচটিটিপি অনুরোধে প্রেরিত শিরোনাম যা সার্ভার এবং ক্লায়েন্ট উভয়ই পড়তে পারে।
- ভেরিয়েবলটিকে JSON হিসাবে এনকোড করুন - JSON জাভাস্ক্রিপ্ট অবজেক্টের খুব কাছাকাছি দেখায় এবং বেশিরভাগ JSON অবজেক্ট বৈধ জাভাস্ক্রিপ্ট ভেরিয়েবল।
কুকি সেট করা সত্যিই খুব কঠিন নয়, আপনি কেবল এটির একটি মূল্য নির্ধারণ করুন:
setcookie("MyCookie", $value); // Sets the cookie to the value, remember, do not
// Set it with HTTP only to true.
তারপরে, আপনি এটি ব্যবহার করে জাভাস্ক্রিপ্ট সহ এটি পড়তে পারেন document.cookie
:
এখানে একটি সংক্ষিপ্ত হাত ঘূর্ণিত পার্সার দেওয়া হয়েছে, তবে আমি উত্তরটির সাথে এটির সাথে সংযুক্ত উত্তরটি আরও ভালভাবে পরীক্ষিত হয়েছে:
var cookies = document.cookie.split(";").
map(function(el){ return el.split("="); }).
reduce(function(prev,cur){ prev[cur[0]] = cur[1];return prev },{});
cookies["MyCookie"] // Value set with PHP.
কুকিগুলি অল্প ডেটার জন্য ভাল। ট্র্যাকিং পরিষেবাগুলি প্রায়শই এটি করে।
আমাদের আরও ডেটা হয়ে গেলে আমরা এর পরিবর্তে একটি জাভাস্ক্রিপ্ট ভেরিয়েবলের অভ্যন্তরে এটি JSON এর সাথে এনকোড করতে পারি:
<script>
var myServerData = <?=json_encode($value)?>; // Don't forget to sanitize
//server data
</script>
ধরে নেওয়া যাক $value
করা হয় json_encode
পিএইচপি পাশ সক্ষম (এটা সাধারণত)। এই কৌশলটি স্ট্যাক ওভারফ্লো তার চ্যাটের সাথে উদাহরণস্বরূপ (কেবল পিএইচপি পরিবর্তে। নেট ব্যবহার করে) যা করে।
আবেদন
আপনি যদি কোনও অ্যাপ্লিকেশন লিখছেন - হঠাৎ প্রাথমিক লোড সময়টি অ্যাপ্লিকেশনটির চলমান পারফরম্যান্সের মতো সবসময় গুরুত্বপূর্ণ নয় এবং এটি আলাদাভাবে ডেটা এবং কোড লোড করার জন্য অর্থ প্রদান শুরু করে।
আমার উত্তর এখানে জাভাস্ক্রিপ্ট এজেএক্স ব্যবহার করে ডেটা লোড করার উপায় ব্যাখ্যা করে:
function callback(data){
// What do I do with the response?
}
var httpRequest = new XMLHttpRequest;
httpRequest.onreadystatechange = function(){
if (httpRequest.readyState === 4) { // Request is done
if (httpRequest.status === 200) { // successfully
callback(httpRequest.responseText); // We're calling our method
}
}
};
httpRequest.open('GET', "/echo/json");
httpRequest.send();
বা jQuery সহ:
$.get("/your/url").done(function(data){
// What do I do with the data?
});
এখন, সার্ভারটিতে কেবল একটি /your/url
রুট / ফাইল থাকা দরকার যা কোড ধারণ করে যা ডেটা আঁকড়ে ধরে এর সাথে কিছু করে, আপনার ক্ষেত্রে:
<$php
...
$val = myService->getValue(); // Makes an API and database call
echo json_encode($val); // Write it to the output
$>
এইভাবে, আমাদের জাভাস্ক্রিপ্ট ফাইলটি কোডের জন্য জিজ্ঞাসা বা বিন্যাসের চেয়ে ডেটা জিজ্ঞাসা করে এবং এটি দেখায়। এটি পরিষ্কার এবং অ্যাপ্লিকেশন বেশি হওয়ার সাথে সাথে অর্থ প্রদান শুরু করে। এটি উদ্বেগের আরও ভাল বিভাজন এবং এটি কোনও প্লাস যে কোনও সার্ভার সাইড প্রযুক্তি জড়িত ছাড়াই ক্লায়েন্টের সাইড কোডটি পরীক্ষা করার অনুমতি দেয়।
পোস্টস্ক্রিপ্ট: আপনি যখন পিএইচপি থেকে জাভাস্ক্রিপ্টে কোনও ইনজেক্ট করেন তখন আপনাকে এক্সএসএস আক্রমণ আক্রমণকারীদের সম্পর্কে খুব সচেতন হতে হবে । এটা খুব মান সঠিকভাবে অব্যাহতি হার্ড এবং এটা প্রসঙ্গ সংবেদনশীল নয়। আপনি যদি এক্সএসএসের সাথে কীভাবে ডিল করবেন সে সম্পর্কে অনিশ্চিত হন বা এটি সম্পর্কে অবহিত হন - দয়া করে এই ওডাব্লুএসপি নিবন্ধটি পড়ুন , এটি একটি এবং এই প্রশ্নটি ।
myPlugin.start(<?=$val?>
উদ্দেশ্য ছিল? এটা কি সত্য যে "এটি কখনও কখনও কাজ করে"?