首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不带Let语句的for循环中的$.getJSON以实现浏览器兼容性

不带Let语句的for循环中的$.getJSON以实现浏览器兼容性
EN

Stack Overflow用户
提问于 2018-06-09 03:01:46
回答 1查看 27关注 0票数 1

我正在开发一个web应用程序,当一个动作发生时,它将JSON文件加载到leaflet层中。下面的代码使用"let“语句,但是如果它被取出,那么最后一个循环变量会覆盖每一层。

for (var i = 0; i < area_labels.length; i++) {

    let label = area_labels[i];
    let label_color = String(getColor(label));
    let label_name = getReadableName(label);

    $.getJSON(`static/shapefiles/FCN_Smoothed/geojson_class_${label}.json`, function(data) {
      layer = L.geoJSON(data, {style:{color:`${label_color}`, stroke:false, fillOpacity:0.6}})
      lc.addOverlay(layer, label_name);
    });
}

从$.ajax函数将area_labels传递给上面的函数,如下所示:

$.ajax({
    url: '/get_target_area',
    type: 'POST',
    dataType:"json",
    data:  JSON.stringify(payload),

    success: function(data) {
    ...do stuff...
    area_labels = data[5];
    loadLeafletLayers(area_labels);
    }
});

有没有办法在不使用"let“语句的情况下做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 03:10:34

为了在不使用let (我假设您需要它来支持< IE11)的情况下工作,您将需要在for循环中使用闭包,以便维护变量的作用域:

for (var i = 0; i < area_labels.length; i++) {
  (function(l, l_col, l_name) {
    $.getJSON('static/shapefiles/FCN_Smoothed/geojson_class_' + l + '.json', function(data) {
      layer = L.geoJSON(data, {
        style: {
          color: l_col,
          stroke: false,
          fillOpacity: 0.6
        }
      })
      lc.addOverlay(l, l_name);
    });
  })(area_labels[i], String(getColor(label)), getReadableName(label));
}

注意,我还删除了模板文字,就好像您需要删除let关键字以实现浏览器兼容性一样,那么这肯定也不会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档