这是我浏览器的视图:
{
"data": {
"request": [{
"query": "Lat 41.85 and Lon -87.65",
"type": "LatLon"
}],
"time_zone": [{
"localtime": "2012-02-14 16:05",
"utcOffset": "-6.0"
}]
}
}
现在,我正在使用此代码来解析它:
function getTimeZone(latlong) {
jQuery(document).ready(function ($) {
$.ajax({
url: "http://www.worldweatheronline.com/feed/tz.ashx?key=[removed]&q=" + latlong + "&format=json",
dataType: "jsonp",
success: function (parsed_json) {
console.log(parsed_json.time_zone.utcOffset);
return parsed_json.time_zone.utcOffset;
},
error: function (parsed_json) {
//console.log("Error: " + parsed_json);
}
});
});
}
每次运行代码时,都会收到此错误:
Uncaught TypeError: Cannot read property 'utcOffset' of undefined
非常感谢任何协助。
显示到控制台的数据视图(仅复制了我感兴趣的部分):
Result:
Object
data: Object
request: Array[1]
time_zone: Array[1]
0: Object
localtime: "2012-02-14 16:46"
utcOffset: "-6.0"
答案 0 :(得分:3)
实际上,有两个问题:
1)要访问内容,您需要:
parsed_json.data.time_zone [0] .utcOffset;
2)这有点复杂 - 您正在使用异步ajax回调 - 在程序完成发送ajax请求并返回之前未调用success(),并且它不会将其结果返回给父方法。
基本上不能按照你想要的方式去做,除非你使用同步提取(一个坏主意,因为它会锁定你的浏览器,直到响应到来)。
相反,将一个函数的回调参数作为函数的参数,并在结果到达时调用该参数:
即
function getTimeZone(latlong, callback) {
jQuery(document).ready(function ($) {
$.ajax({
url: "http://www.worldweatheronline.com/feed/tz.ashx?key=[removed]&q=" + latlong + "&format=json",
dataType: "jsonp",
success: function (parsed_json) {
console.log(parsed_json.time_zone.utcOffset);
callback(latlong, parsed_json.data.time_zone[0].utcOffset);
},
error: function (parsed_json) {
//console.log("Error: " + parsed_json);
}
});
});
}
然后使用它:
getTimeZone(myLatLong, function(latLong, utcOffset) {
// ... do something with utcOffset here ...
});
答案 1 :(得分:1)
应该是
return parsed_json.data.time_zone[0].utcOffset;
您必须仔细查看返回的JSON结构。它有助于将其分解为单独的行并缩进以反映嵌套。
答案 2 :(得分:0)
应该是parsed_json.data.time_zone[0].utcOffset
吗?