【问题标题】:PHP json_encode then getJSON issue in javascriptPHP json_encode 然后 getJSON 在 javascript 中的问题
【发布时间】:2014-08-09 20:42:32
【问题描述】:

对不起,如果这仍然是该主题的另一个主题,但我从几个小时以来一直在苦苦挣扎,但找不到解决方案。 我正在尝试从 Mysql 数据库中获取数据,用 php 创建一个 JSON,然后在 javascript 中解析这个 JSON。

这是我的 json.php

<?php

$link = mysql_pconnect("localhost", "root", "") or die("Could not connect". mysql_error());
mysql_select_db("people") or die("Could not select database");

$arr = array();

$rs = mysql_query("SELECT * FROM nom");

while($obj = mysql_fetch_object($rs)) {
    $arr[] = $obj;
}
echo '{"users":',json_encode($arr),'}';

/*
//The json object is :
{"users":[{"id":"1","prenom":"Alain","age":"23"},{"id":"2","prenom":"Bruno","age":"24"}]} 
*/
?>

然后我尝试解析成java

<div id="placeholder6"></div>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
    $.getJSON('http://localhost/json.php', function(data) {
    var output="<ul>";
    for (var i in data.users) {
        output+="<li>" + data.users[i].id + " " + data.users[i].prenom + "--" + data.users[i].age+"</li>";
    }

    output+="</ul>";
    document.getElementById("placeholder6").innerHTML=output;
});
</script>

当我用文件 data.json 中的结果替换 localhost/json.php 时,它可以工作,当我用 firefox 打开 localhost/json.php 时,我可以看到 JSON 表......所以我不知道为什么它不适用于 localhost/json.php。 我的 php 代码或 javascript 代码错了吗?

提前感谢您的帮助!

【问题讨论】:

  • 终于成功了,我不得不添加"header("Content-Type: application/json");"和“标头(“访问控制允许来源:*”);“到我的 php 文件。

标签: javascript php getjson json


【解决方案1】:

试试这个方法

var users= data.users;
$.each(users,function(index,users){
    console.log(users.prenom); /// and users.id etc
})

【讨论】:

  • 您好,感谢您的回答。即使我用 data.json 替换 json.php 也不起作用。
  • var data= {"users":[{"id":"1","prenom":"Alain","age":"23"},{"id":"2 ","prenom":"布鲁诺","年龄":"24"}]}; var用户=数据.用户; $.each(users,function(index,users){ console.log(users.prenom); /// 和 users.id 等 })
  • 谢谢。这对我不起作用。我使用“code.jquery.com/jquery-1.7.1.min.js”。你用什么?
  • 感谢您的提示;)
  • 我收到此错误:XMLHttpRequest 无法加载 localhost/json.php。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。
【解决方案2】:

在 php 中试试这个

while($obj = mysql_fetch_object($rs)) {
    $arr[] = $obj;
}

$return = new stdClass();
$return ->users = $arr;

echo json_encode($return);

【讨论】:

  • 我当然试过了。我猜是 json_encode 而不是 jsob_encode。当我用 firefox 打开 json.php 文件时,它现在不显示任何内容。这正常吗?
【解决方案3】:

我认为您的 Web 应用程序服务器(如 Apache 或 nginx)默认为您的 json.php 文件发送 Content-Type: text/html 或类似的东西。另一方面,看起来$.getJSON 方法需要application/json 内容类型字段。

尝试添加:

header("Content-Type: application/json");

json.php 文件的顶部。

编辑 - 附加信息:

我在$.getJSON方法的原始文档中找不到它实际上是否需要特定的Content-Type,所以我查看了源代码:

https://github.com/jquery/jquery/blob/1.7.1/src/ajax.js#L294

这是getJSON 的jQuery 1.7.1(我希望是你说的那个版本)的源代码行,正如你所看到的,它调用jQuery.get,最后一个参数设置为"json"

反过来,jQuery.get 文档揭示了这个论点意味着:

服务器预期的数据类型。默认值:智能猜测(xml、json、脚本或 html)。

来自:http://api.jquery.com/jQuery.get/

因此,当您调用 $.getJSON("/url/to/file", ...) 时,第一个参数应该是 JSON。如果您从我的答案顶部添加 PHP 代码,您的 Web 应用程序服务器会将 php 文件的输出屏蔽为 JSON。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多