在寻找其他答案以使变量成为全局之后我现在已经有一段时间了,看起来很简单,但它似乎没有用。
我的代码是从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的某个地方,我忽略了因为关注全局变量。感谢您帮助我以正确的方式指导。
答案 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);