我很难过。我不确定为什么我的JSON对象没有被我的回调函数解析。 我在控制台日志中收到以下错误:
TypeError:数据未定义 for(var i = 0,len = data.features.length; i< len; i ++){
非常感谢您的帮助!
ajax代码:
$.ajax({
type : 'POST',
url : 'timezone.php',
dataType : 'json',
data : { "func" : "getFirstAndNext", epochTime : browserUTC },
success : function( data ) {
console.log( data.first );
console.log( data.next );
sector_callback( data.first );
// do something with data.myObject.memberVariable
},
error : function ( XMLHttpRequest, textStatus, errorThrown ) {
// didn't work!
}
});
PHP脚本:
<?php
//header('Content-Type: application/json; charset=utf-8');
function getFileStamp($type) {
$timeInterval = 15; // minutes
$now = round($_POST['epochTime'] / 1000);
$now = round(1352324181061 /1000 ); // 3:36:21
//$now = round(1352238011.067);
$offsetInSeconds = $timeInterval * 60;
$offsetInMillis = $timeInterval * 60 * 1000;
$currentFileTime = $now - $now % ($timeInterval * 60);
//$currentFileTime = ($now - ($now % $offsetInMillis))/1000.0; // this returns epoch time in $timeInterval minutes.
$nextFileTime = $currentFileTime + $offsetInSeconds; // next epoch time for file;
return ($type == 0) ? $currentFileTime : $nextFileTime;
}
$currentFileTime = getFileStamp(0) . '.json';
$nextFileTime = getFileStamp(1) . '.json';
$res = array();
$res['file1'] = file_get_contents($currentFileTime);
$res['file2'] = file_get_contents($nextFileTime);
echo json_encode(array("first"=>$res['file1'],"next"=>$res['file1'])); //takes contents and converts it to json object
?>
扇区回调函数:
var allPolygons = [];
function sector_callback() {
//console.log(data);
var bounds = new google.maps.LatLngBounds();
for (var i = 0, len = data.features.length; i < len; i++) {
var coords = data.features[i].geometry.coordinates[0];
siteNames = data.features[i].properties.Name; // added for site names
var path = [];
for ( var j = 0, len2 = coords.length; j < len2; j++ ){ // pull out each set of coords and create a map object
var pt = new google.maps.LatLng(coords[j][1], coords[j][0])
bounds.extend(pt);
path.push(pt);
}
var polygons = new google.maps.Polygon({
path: path,
strokeColor: "#000000",
strokeOpacity: 0.8,
strokeWeight: 1,
fillColor: "#000000",
fillOpacity: 0.35,
map: map
});
createClickablePoly(polygons, siteNames);
google.maps.event.addListener(polygons, 'mouseover', function() {
var currentPolygon = this;
currentPolygon.setOptions({
fillOpacity: 0.45,
fillColor: "#FF0000"
})
});
google.maps.event.addListener(polygons, 'mouseout', function() {
var currentPolygon = this;
currentPolygon.setOptions({
fillOpacity: 0.35,
fillColor: "#000000"
})
});
allPolygons.push(polygons);
}
}
答案 0 :(得分:1)
只关注我在这里看到的内容,我没有看到你的sector_callback()无论如何都可以访问数据。当jQuery传入数据时,如果一切正常,您的控制台应该正确记录这些属性。但是当你将一些数据传递给sector_callback()时,它就会丢失。原因是你的sector_callback()要么需要读取arguments []数组来获取它,要么你需要将函数签名更改为sector_callback(data)。
在你的jQuery块中,传递数据而不是data.features:
sector_callback( data );
并更改自己的回调签名:
function sector_callback(data) {
console.log(data); // will log the whole chunk of the server data returned
...
}
这是因为数据在返回到jQuery回调时处于关闭状态。即使你已经在闭包之外的某个地方声明它,它将保留本地范围,除非你明确地传递它,否则你的其他函数无法访问它。
希望我已经理解了问题的关键所在,这很有帮助......