JavaScript JSON PHP
-
PHP文件
JSON的一个常见用途是从Web服务器读取数据,并在网页中显示数据。本章将教您如何在客户端和PHP服务器之间交换JSON数据。PHP有一些内置函数来处理JSON。可以使用PHP函数json_encode()将PHP中的对象转换为JSON :<?php $myObj = new \stdClass(); $myObj->name = "John"; $myObj->age = 30; $myObj->city = "New York"; $myJSON = json_encode($myObj); echo $myJSON; ?>
结果输出:{"name":"John","age":30,"city":"New York"}
客户端JavaScript:
这是客户端上的JavaScript,使用AJAX调用从上面的示例请求PHP文件:使用JSON.parse()将结果转换为JavaScript对象:
尝试一下var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj.name; } }; xmlhttp.open("GET", "demo_file.php", true); xmlhttp.send();
-
PHP数组
使用PHP函数json_encode()时,PHP中的数组也将转换为JSON :<?php $myArr = array("John", "Mary", "Peter", "Sally"); $myJSON = json_encode($myArr); echo $myJSON; ?>
结果输出:["John","Mary","Peter","Sally"]
客户端JavaScript:
使用JSON.parse()将结果转换为JavaScript数组:
尝试一下var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var 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.stringify()将JavaScript对象转换为JSON:
尝试一下obj = { "table":"customers", "limit":10 }; dbParam = JSON.stringify(obj); xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xmlhttp.open("GET", "json_demo_db.php?x=" + dbParam, true); xmlhttp.send();
示例说明:
- 定义包含表属性和限制属性的对象。
- 将对象转换为JSON字符串。
- 使用JSON字符串作为参数向PHP文件发送请求。
- 等到请求返回结果(作为JSON)
- 显示从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 ? LIMIT ?"); $stmt->bind_param("ss", $obj->table, $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返回。
循环结果:
将从PHP文件接收的结果转换为JavaScript对象,或者在本例中为JavaScript数组:使用JSON.parse()将JSON转换为JavaScript对象:
尝试一下... xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); for (x in myObj) { txt += myObj[x].name + " "; } document.getElementById("demo").innerHTML = txt; } }; ...
-
POST请求
将数据发送到服务器时,通常最好使用HTTP POST方法。要使用POST方法发送AJAX请求,请指定方法和正确的标头。发送到服务器的数据现在必须是send()方法的参数:obj = { "table":"customers", "limit":10 }; dbParam = JSON.stringify(obj); xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); for (x in myObj) { txt += myObj[x].name + " "; } document.getElementById("demo").innerHTML = txt; } }; xmlhttp.open("POST", "json_demo_db_post.php", true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send("x=" + dbParam);
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 ? LIMIT ?"); $stmt->bind_param("ss", $obj->table, $obj->limit); $stmt->execute(); $result = $stmt->get_result(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
要学习PHP和MySQL数据库的知识请转到我们的PHP教程和MySQL教程