[英]PHP json_encode then getJSON issue in javascript
抱歉,如果这仍然是该主题的另一个话题,但是自数小时以来我一直在努力,但找不到解决方案。 我正在尝试从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代码错误吗?
在此先感谢您的帮助 !
试试这个在PHP
while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}
$return = new stdClass();
$return ->users = $arr;
echo json_encode($return);
试试这个方法
var users= data.users;
$.each(users,function(index,users){
console.log(users.prenom); /// and users.id etc
})
我认为您的Web应用程序服务器(例如Apache或nginx)默认发送Content-Type: text/html
或类似的内容作为json.php
文件。 另一方面,看起来$.getJSON
方法需要一个application/json
内容类型字段。
尝试添加:
header("Content-Type: application/json");
到json.php
文件的顶部。
编辑-其他信息:
我在$.getJSON
方法的原始文档中$.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
文档揭示了此参数的意思是:
服务器期望的数据类型。 默认值:Intelligent Guess(xml,json,脚本或html)。
因此,当您调用$.getJSON("/url/to/file", ...)
,第一个参数应该是JSON。 如果从答案的顶部添加PHP代码,则您的Web应用程序服务器会将php文件的输出屏蔽为JSON。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.