JSON协议
JSON协议 是一种无需担心跨域问题的发送 JSON 数据的方法。
JSON协议 不使用XMLHttpRequest
目的。
JSON协议 使用<script>
标签。
JSONP 简介
JSONP 代表带填充的 JSON。
由于跨域策略,从另一个域请求文件可能会导致问题。
请求外部 脚本 来自其他域的不存在此问题。
JSONP 利用了这个优势,使用 script 标签来请求文件,而不是 XMLHttpRequest
目的。
<script src="demo_jsonp.html">
服务器文件
服务器上的文件将结果包装在函数调用中:
结果返回对名为“myFunc”的函数的调用,并以 JSON 数据作为参数。
确保该功能在客户端上存在。
JavaScript 函数
名为“myFunc”的函数位于客户端,可以处理 JSON 数据:
创建动态脚本标签
上面的例子将根据您放置脚本标签的位置,在页面加载时执行“myFunc”函数,这不是很令人满意。
仅在需要时才应创建脚本标签:
例子
创建并插入<script> tag when a button is clicked:
函数 clickButton() {
让 s = document.createElement("script");
s.src =“demo_jsonp.html”;
文档.body.appendChild(s);
}
亲自尝试 »
动态 JSONP 结果
上面的例子仍然非常静态。
通过将 JSON 发送到 php 文件使示例动态化,并让 php 文件根据获取的信息返回 JSON 对象。
PHP 文件
<?php
标头(“内容类型:application/json;字符集=UTF-8”);
$obj = json_decode($_GET["x"], false);
$conn = new mysqli("我的服务器", "我的用户", "我的密码", "Northwind");
$result = $conn->query("从“.$obj->$table”中选择名称。" LIMIT“.$obj->$limit”);
$输出=数组();
$输出=$结果->fetch_all(MYSQLI_ASSOC);
回声“myFunc(“。json_encode($ outp)。”)”;
?>
PHP文件解释:
- 使用 PHP 函数将请求转换为对象 json_decode().
- 访问数据库,并使用请求的数据填充数组。
- 将数组添加到对象。
- 使用以下方式将数组转换为 JSON: json_encode() 功能。
- 用“myFunc()”包裹返回对象。
JavaScript 示例
“myFunc”函数将从 php 文件中调用:
const obj = { 表:“产品”, 限制:10 };
让 s = document.createElement("script");
s.src = “jsonp_demo_db.html?x=” + JSON.stringify(obj);
文档.body.appendChild(s);
函数 myFunc(myObj) {
让txt =“”;
对于(让 x 在 myObj 中){
txt += myObj[x].name + "<br> “;
}
document.getElementById("demo").innerHTML = txt;
}
亲自尝试 »
回调函数
当你无法控制服务器文件时,如何让服务器文件调用正确的函数?
有时服务器文件提供回调函数作为参数:
例子
php 文件将调用您作为回调参数传递的函数:
让 s = document.createElement("script");
s.src =“jsonp_demo_db.html?回调=我的显示功能";
文档.body.appendChild(s);
亲自尝试 »