javascript - 从数据库中的ajax结果创建Javascript数组

标签 javascript jquery ajax

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

 <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>

最佳答案

来自Cloud Made documentation

Constructor
CM.LatLng( latitude, longtitude, unbounded?)

Description

Creates an CM.LatLng object (notice that latitude comes first). By default, longtitude is wrapped to lie between -180 and 180, and latitude is clamped to lie between ~-85 and 85. If unbounded set to true, it leaves lat./long. as i

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

new CM.LatLng(mlon, mlat)

这可能是错误的方式。

此外,您还在每次调用上执行大量设置代码,这将为数组中的每个元素触发。在之后执行“设置 map ”代码是有意义的

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 key 。

关于javascript - 从数据库中的ajax结果创建Javascript数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9912416/

相关文章:

javascript - 如何使用 JsTestDriver 测试 jquery 和 ajax 调用?

javascript - 悬停时的 jQuery 可排序列表句柄

javascript - 如何使轮播和滚动动画在单个网页上协同工作

jquery - 自定义select2多选

javascript - jQuery中修改属性的最短方式

javascript - 我应该如何使用 PHP $_GET 和变量来用其他文件的内容填充我的模板页面?

javascript - 如何在选择选项而不是对象 :1 etc 上获取字符串值

javascript - jQuery隐藏最近(“div”)不起作用

javascript - 谷歌地图标记不起作用

java - 使用 jQuery 动态更改输入值不会操作 JSF 组件的 ajax onchange 事件