0

我是一个绝对的 JavaScript 新手,但是我正在从事一个私人项目。简而言之,我将阅读一些平面文件(.csv/.txt 格式)并将这些值传递给 HighCharts。

我几乎可以处理所有事情(我认为)。

我无法得到的唯一一点是将文件读入数组,然后挑选出我需要的位。我可以使用脚本将文件直接传递到 Highcharts,但它对于我的需要不够灵活。

无论如何,对于以下 Livedata.txt 包含

1370576580,酸度,pH,8.20,ORP,mV,366.99,ReefTemp,DegC,25.1,RoomTemp,DegC,21.7,HeaterTemp,DegC,25.1

(EPOCH,然后是 5 个探针的 3 个数据点组(测量、单位、值))

我的(我的片段)脚本是:


var $livedata = new Array();
var currentph;
$.get('livedata.txt', function(data){
        livedata = data.split(',');
});
currentph = $livedata[3];
document.write("<b>currentph is </b>=>"+currentph+"<br>");

像这样 var currentph = undefined

如果我将 document.write 语句移动到 $.get 中(这是一个函数吗?)它确实包含值 8.20

此外,如果我将 currentph 声明为 8.20,我的脚本的其余部分都可以接受这个值。

非常感谢任何帮助/建议。

我将声明 16 个变量,数组中的每个值 1 个(只是为了稍后阅读脚本)。

干杯

4

2 回答 2

0

因为$.get是异步的。当您currentph = $livedata[3];在那之后立即调用时,响应尚未到达。document.write这就是当您将语句移动到$.get的回调函数时它起作用的原因。还要检查你的错字,你$之前失踪了livedata。如果你需要做同步调用,你可以$.ajax试试async:false

$.ajax(
     {
       url:'livedata.txt', 
       async:false,
       success: function(data){
         $livedata = data.split(',');
       }
    }
);
于 2013-06-07T04:04:11.837 回答
0
  1. 您忘记为$您的变量添加前缀livedata
  2. 您的代码的其他问题是;a) 如果 'livedata.txt' 从未加载,$livedata将是一个空数组;b) 如果加载了“livedata.txt”,但没有至少 4 个逗号分隔值,则$livedata[3]将未定义。

你可能想用这样的东西重写你的代码:

var $livedata = []; // array literal notation

$.get('livedata.txt', function(data){
        $livedata = data.split(',');
});

// in case array does not have an index 3, set value to 'not found'
var currentph = $livedata[3] || 'not found';

document.write("<b>currentph is </b>=>"+currentph+"<br>");
于 2013-06-07T04:25:44.387 回答