我正在处理一些事情,我已经将来自各地的代码剪断在一起,但我很难让它工作。
所以我想做的是通过ajax / json / php再一次请求另一个页面并查询数据库,然后返回多个结果并在第一页上打印出来。
我的问题是每当我运行client.php页面时,我才会回来
id:[object Object] name:[object Object]
而不是我想要的数据,我知道这可能只是一个愚蠢的小错误,所以任何帮助将不胜感激。
在我使用mysql而不是mysqli进行烧烤之前,它就是代码来自http://openenergymonitor.org/emon/node/107
的代码Client.php
<html>
<head>
<script language="javascript" type="text/javascript" src="jquery.js"></script>
</head>
<body>
<h2> Client example </h2>
<h3>Output: </h3>
<div id="output">this element will be accessed by jquery and this text replaced</div>
<script id="source" language="javascript" type="text/javascript">
$(function ()
{
$.ajax({
url: 'api.php', //the script to call to get data
data: "", //you can insert url argumnets here to pass to api.php
//for example "id=5&parent=6"
dataType: 'json', //data format
success: function(data) //on recieve of reply
{
var id = data[0]; //get id
var vname = data[1]; //get name
$('#output').html("<b>id: </b>"+id+"<b> name: </b>"+vname); //Set output element html
}
});
});
</script>
</body>
</html>
Api.php
<?php
$host = "localhost";
$user = "root";
$pass = "";
$databaseName = "abeiq_stock";
$tableName = "variables";
$con = mysql_connect($host,$user,$pass);
$dbs = mysql_select_db($databaseName, $con);
$query = "SELECT * FROM $tableName";
$result = mysql_query($query);
$rows = array();
while($r = mysql_fetch_assoc($result)){
$rows[] = $r; has the same effect, without the superfluous data attribute
$rows[] = array('data' => $r);
}
echo json_encode($rows);
?>
答案 0 :(得分:1)
您要发回整个对象数组。这个JavaScript是完全错误的:
var id = data[0]; //get id
var vname = data[1]; //get name
它应该像......
var id = data[0].data.id
var vname = data[0].data.id
显然,循环而不是硬编码0,但你明白了。
您还应该学习做一些基本的调试。如果在jQuery回调中使用console.log(data)
,则可以看到正在反序列化的内容。此外,您可以使用浏览器工具查看原始请求/响应数据。如果你学会调试一下,你可以快速解决这个问题。
而且,为什么要将数据添加到$rows
两次?不要那样做。
答案 1 :(得分:0)
我知道这是在6月回来并且有所帮助,但是真正帮助我理解或者至少更好地导航JSON的是它的stringify
方法:
JSON.stringify(SOME_JSON_OBJECT);
由于您可以清楚地看到传入的内容成为对象,因此会将其作为对象的所有JSON元素的String转储回来。