JSONP

JSONP 是一种无需考虑跨域问题即可传送 JSON 数据的方法。

JSONP haikutumia XMLHttpRequest kwa sababu ya kikurahusiko.

Matumizi ya JSONP <script> Tukio la kitabia kinapokabili.

Mwongozo wa JSONP

JSONP inamaanisha JSON with Padding.

Kuandika mifaa ya nchi nyingine inaweza kumfanya matokeo, kwa sababu ya kikurahusiko cha kimaadili.

Kuandika mifaa ya nchi nyingine haikutafuta matokeo hili.

JSONP inatumiwa jukuu hali hiyo, na kusimamia script tukio kwa XMLHttpRequest kwa sababu ya kikurahusiko cha kimaadili.

<script src="demo_jsonp.php">

Mifaa ya Server

Mafaa ya kifaa kwa mifaa ya server kwenye kikurahusiko cha programu:

Mifano

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

Onyesha kifayili cha PHP

Matokeo hupaswa kwa uwanja wa programu ya "myFunc" na data ya JSON kama kifupi.

Takuwa na uhakika kwamba kina hili linapatikana kwenye mawakilishi.

Muhtasari wa Fungu wa JavaScript

Programu ya "myFunc" inahusishwa kwenye mawakilishi, inatumia data ya JSON:

Mifano

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

Tukifanya kwa kuzungumza

kutengeneza faili ya script ya mawasiliano

Mfano huu atakusaidia kumaliza kufanya "myFunc" kwa wakilishi wa kituo, na kwa sababu ya uwanja wako wa faili ya script, hii inapungua sana.

Faili ya script inahitajika kwa sababu ya huzuni:

Mifano

kutengeneza na kuongeza faili ya <script> kwa ujauzito wa guraa:

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

Tukifanya kwa kuzungumza

Matokeo wa JSONP wa mawasiliano

Mfano wa juu ni kweli.

Inaweza kuwaandika JSON kwa kuituma kwa kifayili cha PHP kwa kujenga mivuno ya mawasiliano, kisha kubadilika kwa mawasiliano iliyotolewa na kifayili cha PHP ili kureturna kiume wa JSON.

Kifayili cha 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).")";
?>

Kifayili cha PHP na maelezo:

  • kufaisha kwa kufungua kiume, kusaidia programu za PHP json_decode().
  • kulenda kifayili cha database, na kufungua majadilu ya data yaliyotumika.
  • kuongeza majadilu kwenye kiume.
  • kusaidia json_decode() maelezo huo unaandika kwa muundo wa JSON.
  • kufungua objekti kwa "myFunc()".

Mifano wa JavaScript

kutumia programu ya "myFunc" kutoka kifayili ya php:

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);
 }
function myFunc(myObj)  {
    var x, txt = "";
    for (x in myObj)  {
        txt += myObj[x].name + "<br>";
     }
    document.getElementById("demo").innerHTML = txt;
}

Tukifanya kwa kuzungumza

Programu ya kubadilika

Je, kama huna kujadilisha fayili ya server, hatauweza kujadilisha fayili ya server kumtumia programu sahihi?

Mwana wa server file inaandika programu ya kubadilika kama thamani ya kipakuo:

Mifano

Fayili ya PHP itakumpatia programu inayotumiwa kama thamani ya kubadilika:

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

Tukifanya kwa kuzungumza