JSONP
JSONP သည် ဒိုမိန်းဖြတ်ကျော်ပြဿနာများကို စိတ်ပူစရာမလိုဘဲ JSON ဒေတာပေးပို့ခြင်းအတွက် နည်းလမ်းတစ်ခုဖြစ်သည်။
XMLHttpRequest
JSONP သည် အရာဝတ္တု ကို အသုံးမပြုပါ ။
JSONP <script>
အစား တဂ်ကို အသုံးပြုသည်။
JSONP မိတ်ဆက်
JSONP သည် JSON အတွက် Padding ဖြစ်သည်။
အခြားဒိုမိန်းမှ ဖိုင်တစ်ခုတောင်းဆိုခြင်းသည် ဒိုမိန်းဖြတ်ကျော်မူဝါဒကြောင့် ပြဿနာများဖြစ်စေနိုင်သည်။
အခြားဒိုမိန်းမှ ပြင်ပ script တစ်ခုကို တောင်းဆိုခြင်းသည် ဤပြဿနာ မရှိပါ။
XMLHttpRequest
JSONP သည် ဤအားသာချက်ကို အသုံးပြုပြီး အရာဝတ္ထု အစား script tag ကိုသုံး၍ ဖိုင်များကို တောင်းဆိုပါသည် ။
<script src="demo_jsonp.php">
ဆာဗာဖိုင်
ဆာဗာရှိဖိုင်သည် လုပ်ဆောင်ချက်ခေါ်ဆိုမှုအတွင်း ရလဒ်ကို ခြုံငုံမိသည်-
ဥပမာ
<?php
$myJSON = '{ "name":"John", "age":30, "city":"New York" }';
echo "myFunc(".$myJSON.");";
?>
ရလဒ်သည် ကန့်သတ်ချက်တစ်ခုအနေဖြင့် JSON ဒေတာဖြင့် "myFunc" ဟု အမည်ပေးထားသော လုပ်ဆောင်ချက်တစ်ခုသို့ ခေါ်ဆိုမှုကို ပြန်ပေးသည်။
လုပ်ဆောင်ချက်သည် သုံးစွဲသူတွင် ရှိနေကြောင်း သေချာပါစေ။
JavaScript လုပ်ဆောင်ချက်
"myFunc" ဟု အမည်ပေးထားသည့် လုပ်ဆောင်ချက်သည် သုံးစွဲသူပေါ်တွင် တည်ရှိပြီး JSON ဒေတာကို ကိုင်တွယ်ရန် အဆင်သင့်ဖြစ်နေသည်-
ဥပမာ
function myFunc(myObj)
{
document.getElementById("demo").innerHTML =
myObj.name;
}
Dynamic Script Tag ဖန်တီးခြင်း။
အပေါ်ကနမူနာသည် အလွန်ကျေနပ်စရာမဟုတ်သည့် script tag ကို သင်ထည့်သည့်နေရာအပေါ်အခြေခံ၍ စာမျက်နှာကိုဖွင့်နေချိန်တွင် "myFunc" လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပါမည်။
လိုအပ်သည့်အခါမှသာ script tag ကိုဖန်တီးသင့်သည်-
ဥပမာ
ခလုတ်တစ်ခုကို နှိပ်လိုက်သောအခါ <script> tag ကို ဖန်တီးပြီး ထည့်သွင်းပါ-
function clickButton() {
let s = document.createElement("script");
s.src = "demo_jsonp.php";
document.body.appendChild(s);
}
Dynamic JSONP ရလဒ်
အထက်ဖော်ပြပါ ဥပမာများသည် အလွန်တည်ငြိမ်ဆဲဖြစ်သည်။
JSON ကို php ဖိုင်သို့ ပို့ခြင်းဖြင့် နမူနာကို သွက်လက်အောင်လုပ်ပြီး 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 File က ရှင်းပြထားပါတယ်။
- PHP လုပ်ဆောင်ချက် json_decode() ကို အသုံးပြု၍ တောင်းဆိုချက်အား အရာဝတ္ထုအဖြစ်သို့ ပြောင်းပါ ။
- ဒေတာဘေ့စ်ကို ဝင်ရောက်ပြီး တောင်းဆိုထားသော အချက်အလက်များဖြင့် ခင်းကျင်းတစ်ခုကို ဖြည့်ပါ။
- အရာဝတ္ထုတစ်ခုသို့ array ကိုထည့်ပါ။
- json_encode() လုပ်ဆောင်ချက်ကို အသုံးပြု၍ array ကို JSON သို့ ပြောင်း ပါ။
- "myFunc()" ကို ပြန်ပေးသည့်အရာဝတ္တုတွင် ပတ်ထားသည်။
JavaScript ဥပမာ
"myFunc" လုပ်ဆောင်ချက်ကို php ဖိုင်မှ ခေါ်ပါမည်။
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);