从ajax创建Javascript数组来自数据库

时间:2012-03-28 17:08:27

标签: javascript jquery ajax

我有一张地图,我试图从我的数据库中提取标记点,然后创建一个数组,然后使用该数组绘制地图上的每个纬度和经度点。现在我在这里尝试过一些东西,但是,无论何时我测试它,我只是在地图上得到一个点,就像在亚洲一样,而实际上经度和纬度指向宾夕法尼亚。我认为它只是将所有信息打包到阵列中并试图绘制,但我不确定。真的卡在这里任何帮助将不胜感激。

 <script type="text/javascript">
    $(function () {
        var arraddress = new Array();
        $.ajax({
            url: 'http://example.com/22/www/ba.php',
            data: '',
            dataType: 'json',
            success: function (data) {
                $.each(data, function (key, val) {

                    var lng = val['lng'];
                    var lat = val['lat'];
                    var id = val['id'];
                    var state = val['state'];

                    arraddress[key] = lat + ":" + lng + ":" + state + ":" + id;

                    //Set up the map
                    var APIKEY = "ed24c9065bb55c1090d3d76e7ab8577e";
                    var cloudmade = new CM.Tiles.CloudMade.Web({
                        key: APIKEY
                    });
                    var map = new CM.Map('mapdiv', cloudmade);
                    map.setCenter(new CM.LatLng(39.9, -98.5), 4);

                    //Add the markers from the array
                    var arLen = arraddress.length;
                    for (var i = 0, len = arLen; i < len; ++i) {
                        var onMarker = arraddress[i];
                        var dat = arraddress[i].split(":");
                        var mlat = dat[0];
                        var mlon = dat[1];
                        var mName = dat[2];

                        var thisMarker = new CM.Marker(new CM.LatLng(mlon, mlat), {
                            title: state
                        })
                        map.addOverlay(thisMarker);
                    }
                })

            }
        });
    });

    } 
</script>

2 个答案:

答案 0 :(得分:2)

来自Cloud Made documentation

  

构造
  CM.LatLng(纬度,   经度,没有界限?)

     

说明

     

创建CM.LatLng对象(注意   那个纬度来自第一)。默认情况下,longtitude被包裹起来   在-180和180之间,纬度被夹在〜-85和之间   85.如果unbounded设置为true,则会离开lat./long。我是

Latitude在构造函数中排在第一位,但您已编码:

new CM.LatLng(mlon, mlat)

这可能是错误的方式。

此外,您在每次调用时都会执行大量设置代码,这将针对数组中的每个元素触发。在

之后进行“设置地图”代码是有意义的
success: function (data) {

但之前

 $.each(data, function (key, val) {

修改

再次查看您的代码,如果我正确地阅读它,您可以将其成功功能剥离到

          success: function (data) {

               var APIKEY = "ANONYMISED_KEY";
               var cloudmade = new CM.Tiles.CloudMade.Web({
                      key: APIKEY
               });
               var map = new CM.Map('mapdiv', cloudmade);
               map.setCenter(new CM.LatLng(39.9, -98.5), 4);

                $.each(data, function (key, val) {

                    map.addOverlay( 
                            new CM.Marker(new CM.LatLng(val['lng'], val['lat']), {
                            title: val['state']
                        }));

                })

            }

您可能希望在发布代码时匿名化您的API密钥。

答案 1 :(得分:0)

我认为你交换了lat和lon params:

var thisMarker = new CM.Marker(new CM.LatLng(mlon, mlat)

https://developers.google.com/maps/documentation/javascript/reference?hl=de#LatLng