我很欣赏有很多关于此的帖子,以及谷歌上的很多帖子,但我很难理解如何分解JSON流并访问数据。
我有一个简单的JSON响应:
{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [-122.4211908, 37.7564513]},
"properties": {
"id": "2950648771574984913",
"accuracyInMeters": 80,
"timeStamp": 1309323032,
"reverseGeocode": "San Francisco, CA, USA",
"photoUrl": "https://www.google.com/latitude/apps/badge/api?type=photo&photo=uuRL2jABAAA.9fWeRzNpS-tdX0cqHxxclg.7zdBNW-Rb634EIkOgyO8sw",
"photoWidth": 96,
"photoHeight": 96,
"placardUrl": "https://www.google.com/latitude/apps/badge/api?type=photo_placard&photo=uuRL2jABAAA.9fWeRzNpS-tdX0cqHxxclg.7zdBNW-Rb634EIkOgyO8sw&moving=true&stale=true&lod=1&format=png",
"placardWidth": 56,
"placardHeight": 59
}
}
]
}
我正在尝试访问其中的所有数据,例如:
两个坐标。 reverseGeocode。 等
我已经构建了这样的函数:
function findTristan(){
var FindUrl = "/proxy.php";
var tristanData = $.getJSON(FindUrl,function(json){});
// this is the part I have failed to get right.
alert(tristanData.coordinates);
}
答案 0 :(得分:4)
由于AJAX的异步特性,您只需要在成功回调中操作数据,因为这是唯一可以获得此数据的地方。 $.getJSON
函数立即返回,并且不返回AJAX请求的结果。因此,应该使用您在代码中留空的匿名回调:
function findTristan() {
var FindUrl = '/proxy.php';
$.getJSON(FindUrl, function(json) {
var lat = json.features[0].geometry.coordinates[0];
var lon = json.features[0].geometry.coordinates[1];
alert('lat: ' + lat + ', lon: ' + lon);
});
}
答案 1 :(得分:2)
答案 2 :(得分:0)
这两个应该在getJSON
完整功能中使用。
json.features[0].geometry.coordinates[0]
json.features[0].geometry.coordinates[1]
发出Ajax请求后,您不应只是alert
。为什么?因为Ajax调用本质上是异步的。这只是意味着发出请求并且您的代码会立即继续执行,而无需等待请求获得响应。这就是为什么在从服务器返回结果之前执行alert
(当然没有任何结果)的原因。
并且getJSON
也不会按照您的方式返回数据。它将在完整的函数中返回数据,您必须自己使用它。
function findTristan(){
var FindUrl = "/proxy.php";
var tristanCoords = {};
$.getJSON(FindUrl, function(data){
tristanCoords = data.features[0].geometry.coordinates;
alert("x: " + tristanCoords[0] + ", y: " + tristanCoords[1]);
});
}
每当你必须使用javascript,对象等时,使用Firebug(Firefox插件)并调试你的代码。你将可以深入挖掘你的物体,并确切地看到它的结构。