我知道这是基本的,但我不知道我还能做什么。所以我需要你的帮助。我来告诉你发生了什么事。
的故事是,我有一个数据库请求,我想json编码的数据从该请求和使用它通过一个javascript文件($.ajax
或$.json
)。
我需要的来自该请求的数据是两个值。纬度和经度。但是当我从php收到json_encode
,并把它放在控制台日志或警报它显示未定义而不是"双精度"(因为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的字符串是正确的。很抱歉,如果它很简单但我不知道如何处理未定义的值
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);
由于这是单个对象,您将只得到一个警报。
我认为你的while循环有问题,我认为你在循环中覆盖了相同的索引,你应该在每次迭代时增加索引。
var counter = 0;
while($reg=pg_fetch_assoc($query1)){
$arreglo[counter]=$reg;
counter++;
}