json编码值问题

时间:2015-10-09 03:55:12

标签: php jquery json ajax

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

故事是我有一个数据库请求,我希望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的字符串是正确的。很抱歉,如果它很容易,但我不知道如何处理未定义的值

你的时间。

2 个答案:

答案 0 :(得分:2)

您的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);    
    

    由于这是单个对象,因此您只能获得一个提醒

答案 1 :(得分:0)

我认为你的while循环存在问题,我认为你在循环中覆盖了相同的索引,你应该在每次迭代时增加索引。

var counter = 0;
while($reg=pg_fetch_assoc($query1)){
    $arreglo[counter]=$reg;
    counter++;
}