动态放置Gmap指针

时间:2013-03-28 14:20:28

标签: javascript google-maps typeerror

我有一个我正在使用的定位系统,它使用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,不知道我还能做什么......提前谢谢!

1 个答案:

答案 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,
}
...