0

Googlemapの相互作用にgmap3.net jqueryプラグインを使用するポジショニングシステムを使用しています。

静的な場合は問題なくポインターを配置できますが、動的に配置するのが難しいため、エラーがあることはわかっていますが、それを見つけることができないようです。

かっこが欠けているだけでevalを機能させることができましたが、evalは1つのオブジェクトのみを検出し、コンマの後のすべてを無視するようです。

したがって、マップの変更を開始する 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]')

問題は、データ var をオブジェクトではなく文字列として認識していることだと思います.... しかし、運が悪くて eval を試しましたが、他に何ができるかわかりません... よろしくお願いします!

4

1 に答える 1

1

おそらく、ブラウザーが応答をtext/htmlではなくとして解釈するためですapplication/json。PHP スクリプトで次のようにコンテンツ タイプを指定してください。

header("Content-Type: application/json");

ただし、古いバージョンの Internet Explorer (7 以下) では問題が発生する可能性があります。したがって、もう 1 つできることは、jQuery Ajax 呼び出しに JSON 応答が必要であることを伝えることです。

    $.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 文字列ではないため、ちょうどそこにあるようなエラーを回避します (構造は、 and{...},{...},{...}が欠落しているため、間違いなく JSON ではないようなものです)。[]

最後に、evalJavaScript から関数を削除します。これは何の関係もありません。

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