如何使用Javascript从函数中传递Array值

时间:2013-06-07 03:52:47

标签: javascript jquery variables global local

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

我几乎掌握了一切(我认为)。

我唯一无法获得的是将文件读入数组,然后选择我需要的位。我可以使用脚本将文件直接传递给Highcharts,但它不够灵活,无法满足我的需要。

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

1370576580,酸度,pH值,8.20,ORP,毫伏,366.99,ReefTemp,摄氏度,25.1,RoomTemp的,摄氏度,21.7,HeaterTemp,摄氏度,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(仅为了以后读取脚本)。

干杯

2 个答案:

答案 0 :(得分:0)

因为$.get是asyn。在此之后立即致电currentph = $livedata[3];时,响应尚未到达。当你将document.write语句移动到$.get的回调函数时,这就是它的工作原理。同时检查您的拼写错误,$之前您遗漏了livedata。如果您需要进行同步通话,可以使用$.ajax

尝试async:false
$.ajax(
     {
       url:'livedata.txt', 
       async:false,
       success: function(data){
         $livedata = data.split(',');
       }
    }
);

答案 1 :(得分:0)

  1. 您忘记将$加到变量livedata前面。
  2. 您的代码的其他问题是; a)如果永远不会加载'livedata.txt',$livedata将是一个空数组; b)如果加载了“livedata.txt”,但没有至少4个逗号分隔值,则$livedata[3]将是未定义的。
  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>");