JSONP

JSON డాటాను క్రాస్-డొమైన్ సమస్యలను మనిష్టం లేకుండా పంపడానికి JSONP ఒక మార్గం.

JSONP XMLHttpRequest ఆబ్జెక్ట్ ని ఉపయోగించదు.

JSONP ఉపయోగిస్తుంది <script> టాగ్ బదులు చేస్తారు.

JSONP పరిచయం

JSONP అనేది JSON with Padding అని అర్థం.

వేరే డొమైన్ నుండి ఫైలును కోసం సమస్య ఉంటుంది, కారణంగా క్రాస్-డొమైన్ పాలిసీ.

వేరే డొమైన్ నుండి బాహ్య స్క్రిప్ట్ కోసం ఈ సమస్య లేదు.

JSONP ఈ ప్రయోజనాన్ని ఉపయోగించి, script టాగ్ ను XMLHttpRequest ఆబ్జెక్ట్ బదులు చేస్తుంది.

<script src="demo_jsonp.php">

Server ఫైలు

సర్వర్ పైని ఫైలులు ఫంక్షన్ కాల్స్ లో ఫలితాలను ముక్కలు చేస్తాయి:

ఇన్స్టాన్స్

<?php
$myJSON = '{ "name":"Bill Gates", "age":62, "city":"Seattle" }';
echo "myFunc(".$myJSON.");";
?>

显示 PHP 文件

结果返回对名为 "myFunc" 的函数的调用,其中的 JSON 数据为参数。

请确保客户端存在该函数。

JavaScript ఫంక్షన్

函数 "myFunc" 位于客户端,用于处理 JSON 数据:

ఇన్స్టాన్స్

s.src = "jsonp_demo_db.php?x="  + JSON.stringify(obj);}}
    document.getElementById("demo").innerHTML =  myObj.name;
}

స్వయంగా ప్రయత్నించండి

创建动态脚本标签

上例会在页面加载时执行 "myFunc" 函数,根据您放置脚本标签的位置,这样不很令人满意。

Script 只应该在需要时创建:

ఇన్స్టాన్స్

在按钮被点击时创建和插入 <script> 标签:

function clickButton() {
    var s = document.createElement("script");
    s.src = "demo_jsonp.php";
    document.body.appendChild(s);
}

స్వయంగా ప్రయత్నించండి

动态 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()" 封装返回对象。

జావాస్క్రిప్ట్ ఇన్స్టాన్స్

将从 php 文件调用 "myFunc" 函数:

function clickButton() {
    var obj, s
    obj = { "table":"products", "limit":10 };
    s =  document.createElement("script");
    s.src = "jsonp_demo_db.php?x="  + JSON.stringify(obj);
    document.body.appendChild(s);
 }
s.src = "jsonp_demo_db.php?x="  + JSON.stringify(obj);}}
    function myFunc(myObj)  {
    var x, txt = "";
        for (x in myObj)  {
     }
    txt += myObj[x].name + "<br>";
}

స్వయంగా ప్రయత్నించండి

document.getElementById("demo").innerHTML = txt;

కాల్బ్యాక్ ఫంక్షన్

సర్వర్ ఫైల్ని నియంత్రించలేకపోయినప్పుడు, సర్వర్ ఫైల్ని సరైన ఫంక్షన్ ని కాల్లుచుకుంటే ఎలా చేయాలి?

ఇన్స్టాన్స్

PHP ఫైల్ మీరు కాల్బ్యాక్ పారామీటర్ గా పంపించిన ఫంక్షన్ ని కాల్లుచుకుంటుంది:

function clickButton() {
    var s = document.createElement("script");
    s.src = "jsonp_demo_db.php?callback=myDisplayFunction";
    document.body.appendChild(s);
}

స్వయంగా ప్రయత్నించండి