【问题标题】:How to read JSON data from a web server running PHP and MySQL?如何从运行 PHP 和 MySQL 的 Web 服务器读取 JSON 数据?
【发布时间】:2015-06-08 08:31:33
【问题描述】:

我在http://www.w3schools.com/json/json_example.asp 中阅读了示例。

我尝试使用我的 MySQL 数据库和我的 PHP 代码。但它不起作用。 我是初学者,我不知道它出了什么问题。

这是我的 PHP 链接:http://xebus2014.tk/demo.php

我像这样更改 w3school 代码:

<!DOCTYPE html>
<html>

<head>
<style>
h1 {
    border-bottom: 3px solid #cc9900;
    color: #996600;
    font-size: 30px;
}
table, th , td  {
    border: 1px solid grey;
    border-collapse: collapse;
    padding: 5px;
}
table tr:nth-child(odd)	{
    background-color: #f1f1f1;
}
table tr:nth-child(even) {
    background-color: #ffffff;
}
</style>
</head>

<body>

<h1>Customers</h1>
<div id="id01"></div>

<script>
var xmlhttp = new XMLHttpRequest();
var url = "http://xebus2014.tk/demo.php";

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        myFunction(xmlhttp.responseText);
    }
}
xmlhttp.open("GET", url, true);
xmlhttp.send();

function myFunction(response) {
    var arr = JSON.parse(response);
    var i;
    var out = "<table>";

    for(i = 0; i < arr.length; i++) {
        out += "<tr><td>" + 
        arr[i].STT +
        "</td><td>" +
        arr[i].ID +
        "</td><td>" +
        arr[i].Name +
        "</td><td>" +
        arr[i].Singer +
        "</td></tr>";
    }
    out += "</table>"
    document.getElementById("id01").innerHTML = out;
}
</script>

</body>
</html>

【问题讨论】:

  • 同时发布您的 php 代码。不要将 php 放在 sn-p 中(因为它不起作用)
  • 你的错误信息是什么
  • 您不需要解析响应,因为它已经是 JSON。这可能是错误。
  • 我执行了代码,它工作正常。我使用 PHP 如下
  • 你的代码没问题,但是如果页面不是来自同一个域xebus2014.tk你可能会遇到跨域问题,除非你实现了CORS

标签: javascript php mysql json


【解决方案1】:

您是否将响应设置为 Json 字符串?

header("Content-Type: application/json; charset=UTF-8");

【讨论】:

  • 我在我的 php 代码中添加了标题。但它仍然不显示数据。
【解决方案2】:

您的结果已经是一个对象,因此您不需要使用 JSON.parse 对其进行解析,只需按原样使用并按原样通过循环即可。

我不知道跨域问题,但要运行它,我会直接转到您的函数...使用您的输出查看此小提琴以获取工作循环 -- http://jsfiddle.net/fu3g5Loe/

或者你可以在你的 PHP 后端使用它

echo json_encode('Your result set goes here'); // this will apply the correct JSON representation of your result set before echoing

工作代码

<body>

<h1>Customers</h1>
<div id="id01"></div>

<script>
    /*
    var xmlhttp = new XMLHttpRequest();
    var url = "http://xebus2014.tk/demo.php";

    xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        myFunction(xmlhttp.responseText);
    }
}
xmlhttp.open("GET", url, true);
    xmlhttp.send();
    */

    var params = [{"STT":"1","ID":"123","Name":"Sexy Love","Singer":"T-ara"},{"STT":"2","ID":"456","Name":"Day By Day","Singer":"T-ara"},{"STT":"3","ID":"789","Name":"Cry Cry","Singer":"T-ara"}];

    myFunction(params);

function myFunction(response) {
    var arr = response;

    var i;
    var out = "<table>";

    for(i = 0; i < response.length; i++) {  
    out += "<tr><td>" + 
        arr[i].STT +
        "</td><td>" +
        arr[i].ID +
        "</td><td>" +
        arr[i].Name +
        "</td><td>" +
        arr[i].Singer +
    "</td></tr>";
    }
    out += "</table>"
    document.getElementById("id01").innerHTML = out;
}
</script>

</body>

【讨论】:

  • 我想从服务器读取数据库。控制台回复我“请避免在 cmets 中进行扩展讨论。您想自动将此讨论移至聊天吗?” @Dexter Huinda
  • 尝试将var arr = JSON.parse(response) 替换为var arr = response 并再次测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多