通过窗口方法创建变量全局不起作用

时间:2016-09-29 10:18:24

标签: javascript jquery arrays ajax leaflet

在寻找其他答案以使变量成为全局之后我现在已经有一段时间了,看起来很简单,但它似乎没有用。

我的代码是从CSV文件中获取数据并返回一个名为' chart'的变量。包含一个数组。此Array变量将在Highchart图中的函数外部使用。 (本地返回的数组是正确的)

我正在尝试在函数内部创建变量" global"通过附加它作为窗口的属性。像这样:turn javascript local variable into global variable

但在我的代码中,这并没有成功:

$(document).ready(function() {
$.ajax({
   type: "GET",
    url: "data/data.csv",
    async: false,
    dataType: "text",
    success: function(data) {processData(data);}
});
});

function processData(data) {
   var table = data.split("\n").map(line => line.split(","));
   var categories = table[0].slice(2).map(e=>e*1);
   data = table.slice(1).map(a => ({"name": a[0], "id": parseInt(a[1]), "data": a.slice(2).slice(0).map(e=>e*1)}));
   var lengthdata = data.length - 1;
   var chart = data.splice(0, lengthdata);
   window.chartglobal = chart;

 console.log(chart);
 };

 console.log(chartglobal);

我在这里缺少什么,或者对于mmy特定情况,窗口选项有更好的方法吗?

编辑:

该代码用于传单,其中数据使用map.on和标记id连接到传单标记。这种方式并不重要,调用ajax请求是在尝试获取全局值后触发的伪就绪事件。我不知道将异步更改为' true'改变,但无论如何都可以。

变量用于map.on,如下所示:

map.on('popupopen', function(e) {

var marker = e.popup._source.feature.id; 

var search = function(name) {
    for(var key in chartglobal) {
    if(chartglobal[key].id === name) {   
    return chartglobal[key];
    }}};

    var outputhighchart = search(marker);
    var chartdef = [];
    chartdef.push(outputhighchart);});

由于ajax调用,console.log没有记录,问题出现在map.on的某个地方,我忽略了因为关注全局变量。感谢您帮助我以正确的方式指导。

1 个答案:

答案 0 :(得分:0)

为什么不在函数外声明你的变量并给出一个虚拟的val

var chartglobal = "dummy";
$(document).ready(function() {
$.ajax({
   type: "GET",
    url: "data/data.csv",
    async: false,
    dataType: "text",
    success: function(data) {processData(data);}
});
});

function processData(data) {
   var table = data.split("\n").map(line => line.split(","));
   var categories = table[0].slice(2).map(e=>e*1);
   data = table.slice(1).map(a => ({"name": a[0], "id": parseInt(a[1]), "data": a.slice(2).slice(0).map(e=>e*1)}));
   var lengthdata = data.length - 1;
   var chart = data.splice(0, lengthdata);
   chartglobal = chart;

 console.log(chart);
 };
//as @Artur Filipiak sais at this point variable is not setted yet. so should print "dummy"
 console.log(chartglobal);