向函数添加多个语句
Adding multiple statements to function
我的数据是这样的:
$.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);
});
}
});
在控制台中,此 returns 我的查询的可能值,例如 18 19 20 21 等
它们也可以是像 TRUE FALSE 这样的字符串。
我需要的是让这些值创建用于使用 cartoDB/leaflet 构建地图的语句。这是函数:
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);
}
总而言之:我想弄清楚我是如何得到问题中的最后一个函数的。我需要制作一些 "sublayers" 来匹配从我的 AJAX 返回的值的数量以及那些填充在子层语句中正确区域的值。
您可能希望循环 array.Just 中的每个条目,将您的数据发送到此函数,它将创建对象
function goMap3(data) {
var layerSource = {
user_name: 'me',
type: 'cartodb',
sublayers: []
};
//Adds a new sublayer to the layerSource object every iteration.
$.each(data, function (i, attr_value) {
layerSource.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;"
});
});
cartodb.createLayer(map_object, layerSource, options)
.addTo(map_object);
}
这些不是多条语句,它们只是一个数组的元素。您可以简单地在 $.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)
。
我的数据是这样的:
$.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);
});
}
});
在控制台中,此 returns 我的查询的可能值,例如 18 19 20 21 等
它们也可以是像 TRUE FALSE 这样的字符串。
我需要的是让这些值创建用于使用 cartoDB/leaflet 构建地图的语句。这是函数:
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);
}
总而言之:我想弄清楚我是如何得到问题中的最后一个函数的。我需要制作一些 "sublayers" 来匹配从我的 AJAX 返回的值的数量以及那些填充在子层语句中正确区域的值。
您可能希望循环 array.Just 中的每个条目,将您的数据发送到此函数,它将创建对象
function goMap3(data) {
var layerSource = {
user_name: 'me',
type: 'cartodb',
sublayers: []
};
//Adds a new sublayer to the layerSource object every iteration.
$.each(data, function (i, attr_value) {
layerSource.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;"
});
});
cartodb.createLayer(map_object, layerSource, options)
.addTo(map_object);
}
这些不是多条语句,它们只是一个数组的元素。您可以简单地在 $.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)
。