我知道这是基本的,但我不知道我还能做些什么。所以我需要你的帮助。我会告诉你发生了什么。
故事是我有一个数据库请求,我希望json对来自该请求的数据进行编码,并通过javascript文件($.ajax
或$.json
)使用它。
我需要的数据是两个值。纬度和经度。但是当我从php收到json_encode
并将其放入控制台日志或警报时,它会显示undefined而不是“double precision”(因为json字符串)。
我会给你看代码。
php
<?php
$dbconn3 = pg_connect
("host= localhost port=5432 dbname=EmergenciesResponse user=postgres password=asdf");
$query1=pg_query
("select latitude, longitude from emergency where id_emergency=5");
$arreglo=array();
while($reg=pg_fetch_assoc($query1)){
$arreglo[]=$reg;
}
echo json_encode($arreglo);
pg_close($dbconn3);
?>
然后是.js
代码
$.ajax({
url: 'consulta2.php',
data:{
},
method: 'POST',
dataType:'json',
success: function(data)
{
alert("latitude:"+data.latitude+"longitude:"+data.longitude);
}
});
正如我所说,当我做一个警告指令时,输出打印未定义,但php的字符串是正确的。很抱歉,如果它很容易,但我不知道如何处理未定义的值
你的时间。
答案 0 :(得分:2)
您的PHP返回数组对象。响应将如下所示(没有漂亮的打印):
[
{
"latitude": 0.000,
"longitude": 0.000
},
{
"latitude": 1.000,
"longitude": 2.000
},
{
"latitude": 3.000,
"longitude": 4.000
}
]
然而,在JS中,你正在处理一个对象。
如果您只是打开consulta2.php
文件并查看回复,您就会明白问题所在。
id_emergency
不唯信。然后,您的PHP很好,但在JS中,您需要遍历数组:
$.ajax({
url: 'consulta2.php',
data:{
},
method: 'POST',
dataType:'json',
success: function(data)
{
$.each(data, function() { // <-------
alert("latitude:"+this.latitude+"longitude:"+this.longitude);
});
}
});
您将获得从0到多个警报,每对坐标一个。
id_emergency
唯一。然后,你的JS很好,但在PHP中你不需要形成一个数组。它应该简单:
$query1=pg_query("select latitude, longitude from emergency where id_emergency=5");
//$arreglo=array(); // don't need an array
$reg = pg_fetch_assoc($query1); // only 1 object
echo json_encode($reg); // encode the object, but not an array
pg_close($dbconn3);
由于这是单个对象,因此您只能获得一个提醒。
答案 1 :(得分:0)
我认为你的while循环存在问题,我认为你在循环中覆盖了相同的索引,你应该在每次迭代时增加索引。
var counter = 0;
while($reg=pg_fetch_assoc($query1)){
$arreglo[counter]=$reg;
counter++;
}