Json编码值问题


json encode value issue

我知道这是基本的,但我不知道我还能做什么。所以我需要你的帮助。我来告诉你发生了什么事。

的故事是,我有一个数据库请求,我想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文件并查看响应,你就会明白问题是什么了。

有两种原因:

  1. 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到多个警报,每对坐标一个。

  2. 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++;
}