2012-02-20 110 views
0

我加載了一個php/json文件。這是我的JSON文件:解析JavaScript中的json

echo '{'; 
echo '"position":['; 
while($inhoud = mysql_fetch_array($result)) 
{ 
    echo '{'; 
    echo '"lat":"'.$inhoud['lat'].'",'; 
    echo '"long":"'.$inhoud['long'].'",'; 
    echo '}'; 

} 

echo ']}'; 

這工作。我想加載它在我的javascript和這樣做︰

$.getJSON('req/position.php', function(data) { 
$.each(data, function(key, val) { 
    newLatLng = key; 
}); 
}); 

但這是行不通的。它加載文件,但我沒有得到這些數據。我該怎麼辦?

感謝,

+0

定義*「這不起作用」*。會發生什麼情況與您預期會發生什麼不同?你收到什麼錯誤信息,如果有的話?當你試圖完成任何事情時,你的瀏覽器輸出的JavaScript控制檯*「不起作用?」* – rdlowrey 2012-02-20 16:06:33

+0

好,沒什麼。它加載文件,然後什麼也沒有。我添加了一個警報,但這並沒有觸發 – 2012-02-20 16:25:47

回答

1

您有一個名爲position的數組中定義的座標。你需要重複這一點。該數組包含具有屬性latlong的對象。如果你想使用的值,你應該嘗試這樣的:

$.getJSON('req/position.php'), function(data){ 
    $.each(data.position, function(index, value){ 
     var newLatLng = { latitude: value.lat, longitude: value.long }; 
    }); 
}); 
+0

我這樣做: $ .getJSON('req/position.php'),function(data){ $ .each(data.position,function(index,value){ alert('success'); }); }; 但我沒有得到警報。 – 2012-02-20 17:33:03

0
$.getJSON('req/position.php', function(data) { 
    var obj = JSON.parse(data); 
    // At this point, obj is an object with your JSON data. 
}); 

來源:MDN

1

返回PHP腳本 header('Content-type: application/json'); 正確的頭文件,它應該工作。請使用json_encode將PHP值編碼爲有效的JSON。

5

我想你在JSON輸出中有一些語法錯誤。

  • 當你輸出"long"數據,您將追加一個逗號,末,但你不應該,因爲"long"是對象的最後關鍵。
  • 您在while循環中打印出一個對象。這些對象是數組的一部分。所以,除了最後一個,你必須在關閉}後附加一個逗號,

而且,如果我可以問,你爲什麼不使用json_encode() PHP函數,而不是構建所有的JSON字符串手動?通過它,您可以將所有數據構建爲普通的PHP數組,然後使用JSON對其進行編碼(轉換)。你會避免所有這些煩人的語法的東西。

試試看:

$data = array(); 
$data['position'] = array(); 

while($inhoud = mysql_fetch_array($result)) 
{ 
    $data['position'][] = array(
     "lat" => $inhoud['lat'], 
     "long" => $inhoud['long'] 
    ); 
} 

echo json_encode($data); 
+0

我將我的json更改爲此代碼。我不知道json_encode。非常好!謝謝。它並沒有固定腳本,但我很滿意這種乾淨的方式 – 2012-02-20 18:08:14

1

JSON構建在PHP中通過串的作品,但原始。開始構建一個數組並使用json_encode()。

$arr = array(); 

while($inhoud = mysql_fetch_array($result)){ 
    $temp = array(); 
    $temp['lat'] = $inhoud['lat']; 
    $temp['long'] = $inhoud['long']; 
    $arr[] = $temp; 
} 

echo json_encode($arr); 

如果所有你在你的MySQL查詢選擇是「緯度」和「長」你也可以只把$inhoud$arr while循環裏面,像這樣。

while($inhoud = mysql_fetch_array($result)){  
    $arr[] = $inhoud; 
} 

如果你這樣做,只要確保你只選擇你想在JSON中輸出的mysql查詢中的列。