0

我有一个正在使用的定位系统,它使用 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

                        }

                    }

                }

            });

        }
    });

然后这里是在 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;

}

我得到的错误是类型错误:

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]')

我相信问题在于它将数据变量视为字符串而不是对象......但是没有运气尝试了 eval,不知道我还能做什么......提前致谢!

4

1 回答 1

1

这可能是因为浏览器将响应解释为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 字符串,而不是将响应构造为字符串,json_encode例如:

$items = array();
foreach($json->value->results as $result)
{
    $items[] = array('latLng' => '['.$result->lat.','.$result->lon.']', 'options' => array('shadow' => '...', ...), ...);
}

echo json_encode($items);

这将避免像您刚才那样的错误,因为那不是有效的 JSON 字符串(结构类似于{...},{...},{...}肯定不是 JSON,因为您缺少[and ])。

最后,eval从你的 JavaScript 中去掉与任何东西无关的函数:

...
marker:
{                       
    values:data,
}
...
于 2013-04-02T08:36:33.823 回答