JSONP

JSONP यह एक ऐसा तरीका है जो JSON डाटा भेजने के लिए जो क्रॉस-डोमेन समस्या को ध्यान में नहीं रखता。

JSONP XMLHttpRequest ऑब्जैक्ट का उपयोग नहीं करता है。

JSONP का उपयोग <script> टैग के स्थान पर ले जाता है。

JSONP व्याख्या

JSONP इसके अर्थ "JSON with Padding" है。

दूसरे डोमेन से फ़ाइल के अनुरोध से समस्या उत्पन्न होती है, क्योंकि क्रॉस-डोमेन नीति के कारण。

दूसरे डोमेन से बाहरी स्क्रिप्ट के अनुरोध में इसकी समस्या नहीं होती。

JSONP इस लाभ का उपयोग करता है और script टैग को XMLHttpRequest ऑब्जैक्ट के स्थान पर डालता है。

<script src="demo_jsonp.php">

सर्वर फ़ाइल

सर्वर पर की फ़ाइल फ़ंक्शन बुल को नतीजा पैकेज करती है:

实例

<?php
$मेराJSON = '{ "नाम":"बिल गेट्स", "आयु":62, "शहर":"सिएटल" }';
echo "मेरा Function(".$मेराJSON.");";
?>

PHP फ़ाइल दिखाएँ

परिणाम, "myFunc" फ़ंक्शन को बुलाता है, जिसमें JSON डाटा पारामीटर के रूप में है。

क्लायंट में फ़ंक्शन का मौजूदगी सुनिश्चित करें。

JavaScript फ़ंक्शन

"myFunc" फ़ंक्शन क्लायंट पर है, जो JSON डाटा को संसाधित करता है:

实例

function myFunc(myObj)  {
    document.getElementById("demo").innerHTML =  myObj.name;
}

स्वयं प्रयोग करें

डायनेमिक स्क्रिप्ट टैग बनाएँ

इस उदाहरण में "myFunc" फ़ंक्शन पृष्ठ लोड होने पर चलाया जाएगा, आपके स्क्रिप्ट टैग के स्थान के अनुसार इसका उपयोग नहीं करना बहुत आनंददायक नहीं है。

स्क्रिप्ट केवल जब आवश्यक होने पर बनाया जाना चाहिए:

实例

बटन क्लिक करने पर <script> टैग बनाएँ और जोड़ें:

फ़ंक्शन क्लिकबटन() {
    वार स = डॉक्युमेंट.क्रिएटएलएलईमेंट("स्क्रिप्ट");
    s.src = "demo_jsonp.php";
    डॉक्युमेंट.बॉडी.एपेंडचिल्ड(एस);
}

स्वयं प्रयोग करें

डायनेमिक JSONP परिणाम

इस उदाहरण अभी भी स्थिर है。

डायनेमिक उदाहरणों को बनाने के लिए PHP फ़ाइल को JSON भेजा जाता है, फिर इसके अनुसार PHP फ़ाइल के जानकारी को बढ़ाकर एक JSON वस्तु वापस की जाती है。

PHP फ़ाइल

<?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 फ़ाइल का व्याख्यान:

  • अनुरोध को वस्तु में बदलें और PHP फ़ंक्शन का उपयोग करें json_decode()
  • डाटाबेस पर्यवेक्षण करें और अनुरोध की गई डाटा को आयत्ताकार में भरें
  • आयत्ताकार को वस्तु में जोड़ें
  • इसका उपयोग करें json_decode() फ़ंक्शन इस आयत्ताकार को JSON में बदल देता है。
  • वापसी वस्तु को "myFunc()" में रखा जाएगा。

जावास्क्रिप्ट इंस्टांस

फाइलों से "myFunc" फ़ंक्शन को बुलाया जाएगा:

फ़ंक्शन क्लिकबटन() {
    var obj, s
    obj = { "table":"products", "limit":10 };
    s =  document.createElement("script");
    s.src = "jsonp_demo_db.php?x="  + JSON.stringify(obj);
    डॉक्युमेंट.बॉडी.एपेंडचिल्ड(एस);
 }
function myFunc(myObj)  {
    var x, txt = "";
    for (x in myObj)  {
        txt += myObj[x].name + "
"; } document.getElementById("demo").innerHTML = txt; }

स्वयं प्रयोग करें

回调函数

如果您无法控制服务器文件,那么如何使服务器文件调用正确的函数呢?

有时服务器文件提供回调函数作为参数:

实例

PHP 文件会调用您作为回调参数传递的函数:

फ़ंक्शन क्लिकबटन() {
    वार स = डॉक्युमेंट.क्रिएटएलएलईमेंट("स्क्रिप्ट");
    एस.स्रोत = "jsonp_demo_db.php?callback=myDisplayFunction";
    डॉक्युमेंट.बॉडी.एपेंडचिल्ड(एस);
}

स्वयं प्रयोग करें