Javascript Gmap指针的动态放置

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

我有一个正在使用的定位系统,它使用gmap3.netjquery插件进行谷歌地图交互

当指针是静态的时,我可以毫无问题地放置它,但是动态地放置指针有困难,我知道有一个错误,我似乎无法发现它

我设法让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

                        }

                    }

                }

            });

        }
    });
下面是在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,
}
...