目录

JSON PHP


JSON 的常见用途是从 Web 服务器读取数据,并将数据显示在网页中。

本章将教您如何在客户端和 PHP 服务器之间交换 JSON 数据。


PHP 文件

PHP 有一些内置函数来处理 JSON。

PHP中的对象可以使用PHP函数转换为JSONjson_encode()

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.html");
xmlhttp.send();
亲自试一试 »


PHP 数组

PHP中的数组在使用PHP函数时也会被转换为JSONjson_encode()

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.html", 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.html?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 返回json_encode() 功能。

使用数据

示例

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

当向服务器发送数据时,通常最好使用 HTTPPOST方法。

使用以下方式发送 AJAX 请求POST方法,指定方法和正确的标头。

发送到服务器的数据现在必须是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.html");
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);
?>