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教程