我有一个我正在使用的定位系统,它使用gmap3.net jquery插件进行Googlemap交互。
我可以把指针放在没有问题的时候它是静态的,但是动态有困难,我知道有一个错误,我似乎无法发现它。
我设法让eval工作,它只是缺少一些括号,但是,eval只检测到一个对象,它似乎忽略了逗号后的所有内容。
所以这是启动地图更改的Javascript:
//Clear old map
$('#map').gmap3('destroy').html('');
var ajaxURL = BASE_URL + 'ajax/getPeopleNearMe/';
$.ajax({
type: 'POST',
url: ajaxURL,
data: {
filter: filter
},
success: function(data){
$('#map').gmap3({
getgeoloc:
{
callback:function(latLng)
{
if(latLng)
{
//Found
$(this).gmap3({
marker:
{
values:[eval("(" + data + ")"],
},
map:
{
options:
{
zoom:12,
mapTypeControl: false,
navigationControl: true,
streetViewControl: false
}
}
});
}
else
{
//Not found
}
}
}
});
}
});
然后这是在我附近的人员上调用的PHP。
function getPeopleNearMe()
{
$apiHandler = new APIHandler();
$result = $apiHandler->usersWithinRadius();
$json = json_decode($result);
$items = '';
if($json->value->results != null)
{
if($json->value->numberOfResults > 0)
{
$count = 0;
foreach($json->value->results as $result)
{
$items .= '
{
latLng:['.$result->lat.','.$result->lon.'],
options:
{
shadow:
{
url: "'.BASE_URL.'css/png/markerBg.png",
scaledSize:
{
width:40,
height:43.5
}
},
icon:
{
url: "'.$result->user->profileImage.'",
scaledSize:
{
width:32,
height:32
},
anchor:
{
x: 16,
y: 40
}
}
}
}';
if($count <= $json->value->numberOfResults){ $items .= ','; $count++;}
}
}
}
echo $items;
}
我得到的错误是类型错误:
TypeError: '
{
latLng:[37.3323,-122.031],
options:
{
shadow:
{
url: "https://m.hollatme.com/css/png/markerBg.png",
scaledSize:
{
width:40,
height:43.5
}
},
icon:
{
url: "https://www.holla.com/img/resize/aHR0cHM6Ly9ob2xsYS1zdGF0aWMtaW1hZ2VzLnMzLmFtYXpvbmF3cy5jb20vcHJvZmlsZS84My8xMzYxODk2MDE2LmpwZw==/48/48/1",
scaledSize:
{
width:32,
height:32
},
anchor:
{
x: 16,
y: 40
}
}
}
},
{
latLng:[37.3343,-122.049],
options:
{
shadow:
{
url: "https://m.hollatme.com/css/png/markerBg.png",
scaledSize:
{
width:40,
height:43.5
}
},
icon:
{
url: "https://www.holla.com/img/resize/aHR0cHM6Ly9ob2xsYS1zdGF0aWMtaW1hZ2VzLnMzLmFtYXpvbmF3cy5jb20vcHJvZmlsZS8xNDEva2F5c2FtcGxlLmpwZw==/48/48/1",
scaledSize:
{
width:32,
height:32
},
anchor:
{
x: 16,
y: 40
}
}
}
},
{
latLng:[37.3323,-122.031],
options:
{
shadow:
{
url: "https://m.hollatme.com/css/png/markerBg.png",
scaledSize:
{
width:40,
height:43.5
}
},
icon:
{
url: "https://www.holla.com/img/resize/aHR0cHM6Ly9ob2xsYS1zdGF0aWMtaW1hZ2VzLnMzLmFtYXpvbmF3cy5jb20vcHJvZmlsZS8xNDIvMTM5Mzk0MF80NDcwMDYwOC5qcGc=/48/48/1",
scaledSize:
{
width:32,
height:32
},
anchor:
{
x: 16,
y: 40
}
}
}
},' is not a valid argument for 'in' (evaluating '"address" in O[L]')
我相信问题是它将数据var视为一个字符串而不是一个对象....但是没有运气就尝试了eval,不知道我还能做什么......提前谢谢!
答案 0 :(得分:1)
可能是因为浏览器会将回复解释为text/html
而不是application/json
。确保在PHP脚本中使用以下内容指定内容类型:
header("Content-Type: application/json");
虽然这可能会导致旧版Internet Explorer(7或更低版本)出现问题。所以你可以做的另一件事是告诉你期望JSON响应的jQuery Ajax调用:
$.ajax({
type: 'POST',
url: ajaxURL,
dataType: 'json',
data: {
filter: filter
},
...
此外,不是将响应构造为字符串,您可以简单地创建一个哈希表/数组并使用json_encode
转换为JSON字符串,如:
$items = array();
foreach($json->value->results as $result)
{
$items[] = array('latLng' => '['.$result->lat.','.$result->lon.']', 'options' => array('shadow' => '...', ...), ...);
}
echo json_encode($items);
这样可以避免像你刚才那样的错误,因为那不是一个有效的JSON字符串(结构类似于{...},{...},{...}
,因为你错过了它绝对不是JSON [
和]
)。
最后,从JavaScript中取消eval
函数,这与任何事情无关:
...
marker:
{
values:data,
}
...