Javascript Gmap指针的动态放置
我有一个正在使用的定位系统,它使用gmap3.netjquery插件进行谷歌地图交互 当指针是静态的时,我可以毫无问题地放置它,但是动态地放置指针有困难,我知道有一个错误,我似乎无法发现它 我设法让eval工作了,只是缺少了一些括号,然而,eval只检测一个对象,它似乎忽略了逗号后的所有内容 下面是启动映射更改的Javascript:Javascript Gmap指针的动态放置,javascript,google-maps,typeerror,Javascript,Google Maps,Typeerror,我有一个正在使用的定位系统,它使用gmap3.netjquery插件进行谷歌地图交互 当指针是静态的时,我可以毫无问题地放置它,但是动态地放置指针有困难,我知道有一个错误,我似乎无法发现它 我设法让eval工作了,只是缺少了一些括号,然而,eval只检测一个对象,它似乎忽略了逗号后的所有内容 下面是启动映射更改的Javascript: //Clear old map $('#map').gmap3('destroy').html(''); var ajaxURL = B
//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
}
}
}
});
}
});
下面是在get people near me函数中调用的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;
}
我认为问题在于它将数据变量视为字符串而不是对象。。。。但是我尝试了eval却没有运气,不知道我还能做什么。。。提前谢谢 这可能是因为浏览器将响应解释为
text/html
,而不是application/json
。确保使用以下命令指定PHP脚本中的内容类型:
header("Content-Type: application/json");
尽管这可能会导致旧版本的Internet Explorer(7或更低版本)出现问题。因此,您可以做的另一件事是告诉jQuery Ajax调用您希望得到JSON响应:
$.ajax({
type: 'POST',
url: ajaxURL,
dataType: 'json',
data: {
filter: filter
},
...
此外,您可以简单地创建一个哈希表/数组,并使用JSON\u 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,
}
...
我使用的格式来自:正在使用的插件。我也尝试过这种方法,但最接近我目前使用的方法,我只是再次尝试了这种方法,但没有运气,它是有效的,但是插件没有绘制指针…我发现他的问题是,lat和lon被作为字符串发送,将其从“latLng”=>“[”。$result->lat.”,“$result->lon.”'到'latLng'=>array($result->lat,$result->lon),并对其进行排序,谢谢您的帮助。
...
marker:
{
values:data,
}
...