Javascript 在传单映射中处理ajax请求
我有一个非常基本的传单贴图,使用Javascript 在传单映射中处理ajax请求,javascript,jquery,ajax,leaflet,Javascript,Jquery,Ajax,Leaflet,我有一个非常基本的传单贴图,使用传单面板层创建一个漂亮的层控件。我有两个函数来创建我的图层和覆盖。我的数据在外部geoJSON文件中,这似乎是我的问题,因为传单并没有提供任何获取外部geoJSON的内容。我还使用proj4spoollibrary来使用json中给出的投影。 所以谷歌告诉我使用ajax,很遗憾,我对此一无所知。我复制粘贴了如下内容: function getOverlays(){ var url = 'myServerUrl'; overlays = [];
传单面板层
创建一个漂亮的层控件。我有两个函数来创建我的图层和覆盖。我的数据在外部geoJSON文件中,这似乎是我的问题,因为传单并没有提供任何获取外部geoJSON的内容。我还使用proj4spool
library来使用json中给出的投影。
所以谷歌告诉我使用ajax,很遗憾,我对此一无所知。我复制粘贴了如下内容:
function getOverlays(){
var url = 'myServerUrl';
overlays = [];
$.ajax({
url: url,
dataType: 'jsonp',
jsonpCallback: 'getJson',
success: function(response) {
overlays.push({
name: "Something",
layer: L.Proj.geoJson(response, {
...
}
});
}
});
return overlays;
}
var map = L.map('map', {
layers: layers[0].layer
});
var layers = getBaseLayers();
var overlays = getOverlays();
var panelLayers = new L.Control.PanelLayers(layers,overlays);
map.addControl(panelLayers);
我的地图是这样构建的:
function getOverlays(){
var url = 'myServerUrl';
overlays = [];
$.ajax({
url: url,
dataType: 'jsonp',
jsonpCallback: 'getJson',
success: function(response) {
overlays.push({
name: "Something",
layer: L.Proj.geoJson(response, {
...
}
});
}
});
return overlays;
}
var map = L.map('map', {
layers: layers[0].layer
});
var layers = getBaseLayers();
var overlays = getOverlays();
var panelLayers = new L.Control.PanelLayers(layers,overlays);
map.addControl(panelLayers);
如果我想直接将图层添加到地图中,这实际上很好。但是在我的例子中,异步请求似乎在我的图层切换器被添加到我的地图之后准备就绪,这样图层就不会出现在那里。
有没有什么方法可以简单地解决这个问题而不必进行回调?在请求完成后添加控件。这可以通过回调函数完成:
function getOverlays(callback){
var url = 'myServerUrl';
overlays = [];
$.ajax({
url: url,
dataType: 'jsonp',
jsonpCallback: 'getJson',
success: function(response) {
overlays.push({
name: "Something",
layer: L.Proj.geoJson(response, {
...
}
});
callback(overlays)
}
});
return overlays;
}
var map = L.map('map', {
layers: layers[0].layer
});
var layers = getBaseLayers();
getOverlays(function(overlays){
var panelLayers = new L.Control.PanelLayers(layers,overlays);
map.addControl(panelLayers);
});
在请求完成后添加控件。这可以通过回调函数完成:
function getOverlays(callback){
var url = 'myServerUrl';
overlays = [];
$.ajax({
url: url,
dataType: 'jsonp',
jsonpCallback: 'getJson',
success: function(response) {
overlays.push({
name: "Something",
layer: L.Proj.geoJson(response, {
...
}
});
callback(overlays)
}
});
return overlays;
}
var map = L.map('map', {
layers: layers[0].layer
});
var layers = getBaseLayers();
getOverlays(function(overlays){
var panelLayers = new L.Control.PanelLayers(layers,overlays);
map.addControl(panelLayers);
});
谢谢,对于一层来说效果很好-如果我有更多的层,比如说在for循环中会怎么样。在最后一层完成后,我如何初始化地图?我最好看看你的代码。无论如何,也要用同样的方法——创建一个标志,指示所有层都已加载(例如,如果您的循环已完成),如果您的标志变为
true
Thank,则调用回调函数,对于一个层来说效果很好——如果我有更多的层,比方说在for循环中会怎么样。在最后一层完成后,我如何初始化地图?我最好看看你的代码。无论如何,也要用同样的方法——创建一个标志,指示所有层都已加载(例如,如果循环已完成),如果标志变为true