0

新手到脚本,所以请亲切。
试图使用jquery-csv分析器从本地文件创建图表。使用谷歌viz。
这段代码我似乎无法得到返回值。 要求选定解析文件的返回值。从嵌套函数获得返回值

使用回调更好吗?以及我将如何实施?已经尝试,但似乎不能得到它的权利。

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); }; 

}

我已经使用这个代码修改,以在屏幕上显示的表形式的数据,但都碰了壁与它获得的谷歌服务器。

任何意见或指针非常感谢。

+0

什么是读取'返回reader.onload.value行了你想要的结果; '?您是否希望chartData函数返回由reader的onload方法加载的值? –

+0

我需要(我认为)从csv解析的数据,所以我可以使用'arraytoDataTable'。见下文。谢谢。 – Tribblehunter

回答

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); 
}); 
+0

感谢您的及时回复。 – Tribblehunter

+0

oops。错误的关键。刚刚尝试过,并抛出了'不是一个数组'。再次查看代码。我在想我错过了什么。 – Tribblehunter

+0

再次感谢您的帮助。上面的代码工作,但它似乎大多数我的其他尝试以某种方式工作,它是导致问题的jquery-csv。很好地解析代码,但谷歌不理解它。进一步研究它。 – Tribblehunter

0

首先,请不要问我们要善待为是一个“不厚道”的假设在你的部分

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

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

最后,在绝望中您可以将响应附加到一个全局对象如窗口,但是,这将创造的其他一系列问题

+0

我对'善良'评论道歉。它的味道很好。 – Tribblehunter

+0

oops。必须停止按回车。价值被发送到谷歌图表,但我只是调整了代码,它返回'不是一个有效的二维数组'。我们将进一步研究数组是如何构建的,并与其他谷歌viz代码进行比较。谢谢大家迄今为止的帮助。 – Tribblehunter