javascript - 向函数添加多个语句

标签 javascript jquery ajax cartodb

我正在获取这样的数据:

$.ajax({
            url: 'php/get_all_attri.php',
            type: 'GET',
            dataType: 'JSON',
            data: {
                col_name: firstSel
            },
            success: function(data) {
                var total_statement = {};
               $.each(data, function(i, data) {
                console.log(data.attri_1);
            });

                }
            });

在控制台中,这会返回我的查询的可能值,例如 18 19 20 21 等。

它们也可以是 TRUE FALSE 等字符串。

我需要的是使用这些值来创建用于使用 cartoDB/leaflet 构建 map 的语句。函数如下:

function goMap3() {

        var layerSource = {
            user_name: 'me',
            type: 'cartodb',
            sublayers: [{
                sql: "SELECT cartodb_id, the_geom_webmercator FROM mytable where attribute='" + attr_value + "'",
                cartocss: "#location_fusion_table {marker-fill:#1d5492;marker-width:5;marker-line-width: 0.3;marker-line-color:#fff;marker-allow-overlap: true;"}
            }, ]
        };
        cartodb.createLayer(map_object, layerSource, options)
            .addTo(map_object);
    }

我需要做的是,将整个部分写入与我的 AJAX 返回的不同值一样多的次数。

          {
                sql: "SELECT cartodb_id, the_geom_webmercator FROM mytable where attribute='" + attr_value + "'",
                cartocss: "#location_fusion_table {marker-fill:#1d5492;marker-width:5;marker-line-width: 0.3;marker-line-color:#fff;marker-allow-overlap: true;"}
            },

在本例中,attr_value 每次都需要用 AJAX 中的值替换。这将使我的整个函数看起来像这样:

function goMap3() {

        var layerSource = {
            user_name: 'me',
            type: 'cartodb',
            sublayers: [{
                sql: "SELECT cartodb_id, the_geom_webmercator FROM mytable where attribute='17'",
                cartocss: "#location_fusion_table {marker-fill:#1d5492;marker-width:5;marker-line-width: 0.3;marker-line-color:#fff;marker-allow-overlap: true;"}
            }, 
  {
                sql: "SELECT cartodb_id, the_geom_webmercator FROM mytable where attribute='18'",
                cartocss: "#location_fusion_table {marker-fill:#1d5492;marker-width:5;marker-line-width: 0.3;marker-line-color:#fff;marker-allow-overlap: true;"}
            },
  {
                sql: "SELECT cartodb_id, the_geom_webmercator FROM mytable where attribute='19'",
                cartocss: "#location_fusion_table {marker-fill:#1d5492;marker-width:5;marker-line-width: 0.3;marker-line-color:#fff;marker-allow-overlap: true;"}
            },]
        };
        cartodb.createLayer(map_object, layerSource, options)
            .addTo(map_object);
    }

总之:我试图弄清楚如何最终得到问题中的最后一个函数。我需要创建一些“子层”来匹配从 AJAX 返回的值的数量以及填充在子层语句中正确区域的值。

最佳答案

这些不是多个语句,它们只是数组的元素。您可以简单地添加到 $.each() 循环中的数组:

function goMap3(data) {

    var sublayers = [];
    $.each(data, function(i, attr_value) {
        sublayers.push({
            sql: "SELECT cartodb_id, the_geom_webmercator FROM mytable where attribute='" + attr_value + "'",
            cartocss: "#location_fusion_table {marker-fill:#1d5492;marker-width:5;marker-line-width: 0.3;marker-line-color:#fff;marker-allow-overlap: true;"
        });
    });

    var layerSource = {
        user_name: 'me',
        type: 'cartodb',
        sublayers: sublayers
    };
    cartodb.createLayer(map_object, layerSource, options)
        .addTo(map_object);
}

然后您可以从 AJAX 成功函数调用 geoMap3(data)

关于javascript - 向函数添加多个语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291394/

相关文章:

c# - ASP.NET MVC 将 List<Foo> 集合从我的 View 发送到 Controller

javascript - 为单击按钮时出现的数组中的每个项目创建一个 div

Javascript 函数声明和提升

javascript - 解析异步回调中的 var

jquery - 如何制作一个固定的横幅,让内容流过它?

javascript - 如何在已初始化 select2 的输入框上设置默认值?

asp.net - 设置显示为 false 时,Telerik 控件会向下移动 asp 面板

javascript - 在数据表表头添加列名和选择框

javascript - 动画完成后旋转的图标会弹回

jquery - ERR_SPDY_PROTOCOL_ERROR Ajax .net Web API