2012-07-16 20 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