JavaScript中的 JSON 和 JSONP

JSON 和 JSONP

JSONP是一种发送JSON数据的方法,无需担忧跨域问题。JSONP不使用该XMLHttpRequest对象。JSONP使用<script>标签代替。
因为跨域策略,从另外一个域请求文件可能会致使问题。从另外一个域请求外部脚本没有此问题。JSONP使用此优点,并使用脚本标记而不是XMLHttpRequest对象请求文件。javascript

<script src="demo_jsonp.php">

服务器文件

服务器上的文件将结果包装在函数调用中:php

<?php
$myJSON = '{"name":"John", "age":30, "city":"New York"}';
echo "myFunc(".$myJSON.");";
?>

 

结果返回对名为“myFunc”的函数的调用,并将JSON数据做为参数。确保客户端上存在该功能。html

JavaScript函数

名为“myFunc”的函数位于客户端,并准备处理JSON数据:java

function myFunc(myObj) {
  document.getElementById("demo").innerHTML = myObj.name;
}
xmlhttp.send("x=" + dbParam);

 

建立动态script标记

根据您放置脚本标记的位置,上面的示例将在页面加载时执行“myFunc”函数,这不是很使人满意。只应在须要时建立script标记:
单击按钮时建立并插入<script>标记:mysql

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

 

动态JSONP结果

上面的例子仍然是很是静态的。经过将JSON发送到php文件使示例动态化,并让php文件根据获取的信息返回JSON对象。
PHP文件ajax

<?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_encode()函数将数组转换为JSON 。
在返回对象周围包裹“myFunc()”sql

JavaScript示例:

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 + "
";
  }
  document.getElementById("demo").innerHTML = txt;
}

 

能够在线体验一下数据库

回调函数

当您没法控制服务器文件时,如何让服务器文件调用正确的函数?有时服务器文件提供回调函数做为参数:
php文件将调用您传递的函数做为回调参数:
PHP文件:json

<?php
$callback = trim($_GET('callback'));
$myJSON = '{ "name":"John", "age":30, "city":"New York" }';
echo $callback."(".$myJSON.");";
?>

 

javascript :跨域

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

 

更多的JSON描述

相关文章
相关标签/搜索