JSON PHP
JSON 的一个常见用法是从 Web 服务器读取数据并在网页中显示数据。
本章将教你如何交换客户端与 PHP 服务器之间的 JSON 数据。
PHP 文件
PHP 有一些内置函数可以处理 JSON。
PHP 中的对象可以使用 PHP 函数 json_encode() 转换为 JSON。
PHP 文件
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
显示 PHP 文件 »
客户端 JavaScript
以下是在客户端上的 JavaScript,它使用 AJAX 调用来请求上面示例中的 PHP 文件
示例
使用 JSON.parse() 将结果转换为 JavaScript 对象
const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
xmlhttp.open("GET", "demo_file.php");
xmlhttp.send();
试一试 »
PHP 数组
PHP 中的数组在使用 PHP 函数 json_encode() 时也会转换为 JSON。
PHP 文件
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
显示 PHP 文件 »
客户端 JavaScript
以下是在客户端上的 JavaScript,它使用 AJAX 调用来请求上面数组示例中的 PHP 文件
示例
使用 JSON.parse() 将结果转换为 JavaScript 数组
var xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj[2];
}
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();
试一试 »
PHP 数据库
PHP 是一种服务器端编程语言,可用于访问数据库。
假设您在服务器上有一个数据库,并且您想从客户端向它发送一个请求,要求它返回名为“customers”的表中的前 10 行。
在客户端,创建一个 JSON 对象来描述您要返回的行数。
在向服务器发送请求之前,将 JSON 对象转换为字符串,并将其作为参数发送到 PHP 页面的 URL。
示例
使用 JSON.stringify() 将 JavaScript 对象转换为 JSON
const limit = {"limit":10};
const dbParam = JSON.stringify(limit);
xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
document.getElementById("demo").innerHTML = this.responseText;
}
xmlhttp.open("GET","json_demo_db.php?x=" + dbParam);
xmlhttp.send();
试一试 »
示例说明
- 定义一个包含“limit”属性和值的 对象。
- 将对象转换为 JSON 字符串。
- 向 PHP 文件发送请求,并将 JSON 字符串作为参数。
- 等待请求返回结果(以 JSON 格式)。
- 显示从 PHP 文件接收的结果。
看看 PHP 文件
PHP 文件
<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);
$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s", $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>
PHP 文件说明
- 使用 PHP 函数 json_decode() 将请求转换为对象。
- 访问数据库,并使用请求的数据填充数组。
- 将数组添加到一个对象中,并使用 json_encode() 函数将对象作为 JSON 返回。
使用数据
示例
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
let text = "";
for (let x in myObj) {
text += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
试一试 »
PHP 方法 = POST
向服务器发送数据时,最好使用 HTTP POST
方法。
要使用 POST
方法发送 AJAX 请求,请指定方法和正确的标头。
发送到服务器的数据现在必须是 send()
方法的参数
示例
const dbParam = JSON.stringify({"limit":10});
const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
let text ="";
for (let x in myObj) {
text += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
xmlhttp.open("POST", "json_demo_db_post.php");
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);
试一试 »
PHP 文件中唯一的区别是获取传输数据的方法。
PHP 文件
使用 $_POST 而不是 $_GET
<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_POST["x"], false);
$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s", $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>