2012-07-16 66 views
4

我从MySQL数据库中获取数据并使用PHP编码JSON对象以在JS中使用。 在PHP端,我这样做在PHP中为JSON对象指定标识符/名称

而($行= mysql_fetch_array($结果))

{ 
    $jmarkers = array(
     'id'=> $row['id'], 
       'lat' => $row['lat'], 
       'lng' => $row['lng'], 
     etc...    
    ); 
    array_push($json, $jmarkers); 
} 

$jsonstring = json_encode($json); 
echo $jsonstring; 

我可以访问使用jQuery在JS的数据,我提出的阵列保存JSON数据:

$ .getJSON( “getjson.php” 功能(数据)

{ 
    myMarkers = data; 
    console.log(myMarkers); 
}); 

我计划访问内部循环的myMarkers阵列中的数据,用这样的语句:

var tempLat = myMarkers.jmarkers [i] .lat;

问题是我的JSON对象不叫jmarkers或其他任何东西,当我把它们打印到控制台他们有这样的通用名“对象”:

对象{ID =“2”,LAT =” 40.6512“,lng =” - 73.9691“,更多...},

所以我不知道如何指向他们在我的JS数组。我查看了PHP JSON编码函数,我看不到要设置或更改对象名称的位置。有什么建议么?谢谢!

回答

3

$jmarkers只是PHP端的JSON对象标识符。当它通过时,它将数组值转换为JSON编码的字符串,因此会丢失标识符。

在您的PHP代码中,array_push($json, $jmarkers)正在将数组追加到当前的$json数组中。因此,您需要实例化一个二维数组,这将不会被您的Javascript代码中的jmarkers标识符所检索。只需使用myMarkers[i]来取代数据。

+0

好的,这是很好的知道。那么如何改变调用我的数组的结构来获取myMarkers数据呢? var tempLat = myMarkers.jmarkers [i] .lat不起作用,我需要一些方法来引用JSON对象... – zannah 2012-07-16 16:11:46

+0

它看起来像$ json只被推送一次(只有一个数组)。试试myMarkers.id,myMarkers.lat等。 – 2012-07-16 16:14:14

+0

太棒了!这工作!非常感谢 – zannah 2012-07-16 16:17:21

1

你......不。 整件事是一个对象。你只需要参考其中的元素。

alert(myMarkers.id); 
+0

当有人因为树木而没有看到森林时,我从我+1上。 – 2012-07-16 16:10:02

5

这是可以预料的。 JSON本质上是一个赋值操作的右手边:

var x = {'foo':'bar'}; 
     ^^^^^^^^^^^^^---- JSON 

x部分不包括在内,因为这仅仅是对象的名称。如果你想包括在您jmarkers文本,它必须是你要编码的数据结构的一部分:

$arr = array(
    'jmarkers' => array(...your data here...); 
); 

但是,这一切确实是增加另一层数据结构没有有用的原因。

+0

实际上,将您的数据放在较低层可能会非常有帮助。它允许您为响应添加顶级属性,例如错误,异常等。它还允许您在响应中添加更多类型的数据,即除了jmarkers之外的qmarkers。 – 2012-08-04 02:35:44