JSONP
JSONP क्रॉस-डोमेन मुद्दों की चिंता किए बिना JSON डेटा भेजने की एक विधि है।
JSONP XMLHttpRequest
वस्तु का उपयोग नहीं करता है।
JSONP <script>
इसके बजाय टैग का उपयोग करता है।
JSONP परिचय
JSONP का मतलब पैडिंग के साथ JSON है।
क्रॉस-डोमेन नीति के कारण किसी अन्य डोमेन से फ़ाइल का अनुरोध करने से समस्याएँ हो सकती हैं।
किसी अन्य डोमेन से बाहरी स्क्रिप्ट का अनुरोध करने से यह समस्या नहीं होती है।
XMLHttpRequest
JSONP इस लाभ का उपयोग करता है, और ऑब्जेक्ट के बजाय स्क्रिप्ट टैग का उपयोग करके फ़ाइलों का अनुरोध करता है।
<script src="demo_jsonp.php">
सर्वर फ़ाइल
सर्वर पर फ़ाइल फ़ंक्शन कॉल के अंदर परिणाम लपेटती है:
उदाहरण
<?php
$myJSON = '{ "name":"John", "age":30, "city":"New York" }';
echo "myFunc(".$myJSON.");";
?>
परिणाम एक पैरामीटर के रूप में JSON डेटा के साथ "myFunc" नामक फ़ंक्शन पर कॉल लौटाता है।
सुनिश्चित करें कि फ़ंक्शन क्लाइंट पर मौजूद है।
जावास्क्रिप्ट फ़ंक्शन
"myFunc" नामक फ़ंक्शन क्लाइंट पर स्थित है, और JSON डेटा को संभालने के लिए तैयार है:
उदाहरण
function myFunc(myObj)
{
document.getElementById("demo").innerHTML =
myObj.name;
}
एक डायनामिक स्क्रिप्ट टैग बनाना
ऊपर दिया गया उदाहरण "myFunc" फ़ंक्शन निष्पादित करेगा जब पृष्ठ लोड हो रहा है, इस आधार पर कि आपने स्क्रिप्ट टैग कहां रखा है, जो बहुत संतोषजनक नहीं है।
स्क्रिप्ट टैग केवल तभी बनाया जाना चाहिए जब आवश्यक हो:
उदाहरण
बटन क्लिक होने पर <script> टैग बनाएं और डालें:
function clickButton() {
let s = document.createElement("script");
s.src = "demo_jsonp.php";
document.body.appendChild(s);
}
गतिशील JSONP परिणाम
उपरोक्त उदाहरण अभी भी बहुत स्थिर हैं।
जेएसओएन को PHP फ़ाइल में भेजकर उदाहरण को गतिशील बनाएं, और PHP फ़ाइल को प्राप्त जानकारी के आधार पर एक JSON ऑब्जेक्ट वापस करने दें।
पीएचपी फ़ाइल
<?php
header("Content-Type: application/json; charset=UTF-8");
$obj =
json_decode($_GET["x"], false);
$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$result = $conn->query("SELECT name FROM
".$obj->$table." LIMIT ".$obj->$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo "myFunc(".json_encode($outp).")";
?>
पीएचपी फ़ाइल समझाया:
- PHP फ़ंक्शन json_decode() का उपयोग करके अनुरोध को किसी ऑब्जेक्ट में कनवर्ट करें ।
- डेटाबेस तक पहुंचें, और अनुरोधित डेटा के साथ एक सरणी भरें।
- किसी ऑब्जेक्ट में सरणी जोड़ें।
- json_encode() फ़ंक्शन का उपयोग करके सरणी को JSON में कनवर्ट करें ।
- वापसी वस्तु के चारों ओर "myFunc ()" लपेटें।
जावास्क्रिप्ट उदाहरण
php फ़ाइल से "myFunc" फ़ंक्शन को कॉल किया जाएगा:
const obj = { table: "products", limit: 10 };
let s = document.createElement("script");
s.src = "jsonp_demo_db.php?x=" + JSON.stringify(obj);
document.body.appendChild(s);
function myFunc(myObj) {
let txt = "";
for (let x in myObj)
{
txt += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = txt;
}
कॉलबैक फ़ंक्शन
जब सर्वर फ़ाइल पर आपका कोई नियंत्रण नहीं होता है, तो आप सर्वर फ़ाइल को सही फ़ंक्शन को कॉल करने के लिए कैसे प्राप्त करते हैं?
कभी-कभी सर्वर फ़ाइल एक पैरामीटर के रूप में कॉलबैक फ़ंक्शन प्रदान करती है:
उदाहरण
php फ़ाइल उस फ़ंक्शन को कॉल करेगी जिसे आप कॉलबैक पैरामीटर के रूप में पास करते हैं:
let s = document.createElement("script");
s.src = "jsonp_demo_db.php?callback=myDisplayFunction";
document.body.appendChild(s);