JSONP
- ਪਿਛਲਾ ਪੰਨਾ JSON HTML
- ਅਗਲਾ ਪੰਨਾ jQuery ਚੋਣਕਾਰ
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 数据:
ਮਾਡਲ
function myFunc(myObj) { 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()" 封装返回对象。
JavaScript ਇੰਸਟੈਂਸ
将从 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); } 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); }
- ਪਿਛਲਾ ਪੰਨਾ JSON HTML
- ਅਗਲਾ ਪੰਨਾ jQuery ਚੋਣਕਾਰ