JSONP
- پچھلے پیج JSON HTML
- پائیدار پیج جی کوئری سلیکٹر
JSONP ایک طریق ہے جس میں بغیر کروسور مسئلے کا انداز بھی ساتھ چلایا جا سکتا ہے تاکہ JSON داده جا سکتی ہیں。
JSONP XMLHttpRequest علامت کا استعمال نہیں کرتا.
JSONP استعمال میں <script>
تگ کا استعمال کیا جاتا ہے.
JSONP معرفت
JSONP یعنی JSON with Padding.
ایک دیگر دامن سے فائل کی درخواست مسئلہ پیدا کرتی ہے، کیونکہ کروسور پالیسی کی وجہ سے.
ایک دیگر دامن سے باہری اسکریپٹ کی درخواست نہیں ہوتی، اس مسئلے کی وجہ سے.
JSONP اس فائدے کو استعمال کرتا ہے، اور script تگ کا استعمال کرتا ہے جس سے XMLHttpRequest علامت کا استعمال کیا جاتا ہے。
<script src="demo_jsonp.php">
سرور فائل
سرور کی فائل میں فنکشن کال میں نتیجہ کو بند کیا گیا ہے:
مثال
<?php $myJSON = '{ "name":"Bill Gates", "age":62, "city":"Seattle" }'; echo "myFunc(".$myJSON.");"; ?>
结果返回对名为 "myFunc" 的函数的调用,其中的 JSON 数据为参数。
请确保客户端存在该函数。
جاوا اسکریپت فُنکشن
函数 "myFunc" 位于客户端,用于处理 JSON 数据:
مثال
فانکشن مائی فانکشن( مائی اوجب) { document.getElementById("demo").innerHTML = myObj.name; }
创建动态脚本标签
上例会在页面加载时执行 "myFunc" 函数,根据您放置脚本标签的位置,这样不很令人满意。
Script 只应该在需要时创建:
مثال
在按钮被点击时创建和插入 <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()" 封装返回对象。
جسٹا اسکریپٹ مثال
将从 php 文件调用 "myFunc" 函数:
فانکشن کلیک باتن( ) { var obj, s obj = { "table":"products", "limit":10 }; s = document.createElement("script"); ایس ایس آر سی = "جسپانگ ڈی مو ن بی ڈی بی کیو ایکس = " + جسٹا انسٹرنگ(اوگب);}} دوکومنٹ بادی اپ انڈ اچ پائی اینڈ اے سی س } فانکشن مائی فانکشن( مائی اوجب) { ور ایکس، تیکسٹ = ""; فار( ایک ان میئو پائی اوجب) { تیکس پائی اوجب کا نیم + "<بر>"; } دوکومنٹ اگیدائی( "ڈی مو" ).اینڈ اچ آر کا اینٹرنال ریلیز = تیکسٹ; }
کال بک فانکشن
اگر آپ نہیں کنٹرول سرور فائل کرسکتے تو سرور فائل کو کیسے صحیح فانکشن کو کال کرسکتا ہے؟
بعض اوقات سرور فائل کال بک فانکشن کو پارامٹر کے طور پر فراہم کرتا ہے:
مثال
پی ایچ پی فائل آپ کی فانکشن کو کال بک کے طور پر بندھا سکتا ہے:
فانکشن کلیک باتن( ) { ور نائی س = دوکومنٹ کری اچ اچ تی اچ اسکریپٹ( ); ایس ایس آر سی = "جسپانگ ڈی مو ن بی ڈی بی کیو فانکشن = مائی ڈسپلے فانکشن"; دوکومنٹ بادی اپ انڈ اچ پائی اینڈ اے سی س }
- پچھلے پیج JSON HTML
- پائیدار پیج جی کوئری سلیکٹر