0

脚本新手,请善待。
尝试使用 jquery-csv 解析器从本地文件创建图表。使用谷歌即。
这部分代码我似乎无法从中获得返回值。要求选择的已解析文件的返回值。

使用回调更好吗?我将如何实施?已经尝试过,但似乎无法做到。

 function chartData(fileToParse) {
var reader = new FileReader();
reader.readAsText(fileToParse);
reader.onload = function(){
  var csv = event.target.result;
 var parsedData = $.csv.toArrays(csv,{onParseValue:$.csv.hooks.castToScalar});
 return parsedData
};
return reader.onload.value;

reader.onerror = function(){ alert('Unable to read ' + file.fileName); };

}

我已经使用此代码修改以在屏幕上以表格形式显示数据,但在将其发送到谷歌服务器时遇到了困难。

非常感谢任何建议或指示。

4

2 回答 2

1

“使用回调更好吗?”

是的,这将是正确的解决方案

“我将如何实施?”

  1. chartData为您的函数定义第二个参数。

  2. 调用时chartData,将回调作为第二个参数传递。

  3. 在事件处理程序中,以与调用任何函数相同的方式调用回调,但将所需的数据传递给它。


                   // receive it-----v
 function chartData(fileToParse, callback) {
     var reader = new FileReader();
     reader.readAsText(fileToParse);
     reader.onload = function () {
         var csv = event.target.result;
         var parsedData = $.csv.toArrays(csv, {
             onParseValue: $.csv.hooks.castToScalar
         });
         callback(parsedData); // call it
     };

     reader.onerror = function () {
         alert('Unable to read ' + file.fileName);
     };
 }

所以你会像这样调用它:

chartData('file/path', function(parsed) {
    console.log(parsed);
});
于 2012-10-22T20:00:11.333 回答
0

首先,请不要要求我们友善,因为这是您的“不友善”假设

通常,您不能从异步函数返回值。您应该考虑为什么要返回一个值,看看是否可以从另一个角度看待它。例如,你需要用 parsedData.. 填充一个 textarea 做什么?,将一些元素附加到 Dom?.. 然后就在那里做!

让我们知道您从 parsedData 中需要什么,我们可以提供帮助。

最后,在绝望中,您可以将响应附加到全局对象,例如窗口,但这会产生许多其他问题

于 2012-10-22T20:01:19.740 回答