PHP json_encode然后javascript中的getJSON问题

时间:2014-08-09 11:29:03

标签: javascript php getjson json

很抱歉,如果这仍然是关于这个问题的另一个主题,但我几个小时都在努力,但找不到解决方案。 我试图从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代码是错误的吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

在php中试试这个

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

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

echo json_encode($return);

答案 1 :(得分:0)

试试这个方法

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

答案 2 :(得分:0)

我认为您的Web应用程序服务器(如Apache或nginx)默认情况下会为Content-Type: text/html文件发送json.php。另一方面,看起来$.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。