当我控制日志时,我有这样的代码,fileContent给出了正确的输出,但当我尝试将它作为返回时,它会给出错误。
我想在其他函数中使用csv文件的内容。保持代码清洁。
;(function(){
function readTextFile(file)
{
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
var fileContent;
rawFile.onreadystatechange = function ()
{
if(rawFile.readyState === 4)
{
if(rawFile.status === 200 || rawFile.status == 0)
{
var allText = rawFile.responseText;
fileContent =csvJSON(allText);
return fileContent;
}
}
}
rawFile.send(null);
}
function csvJSON(csv){
var lines=csv.split("\n");
var result = [];
var headers=lines[0].split(",");
for(var i=1;i<lines.length;i++){
var obj = {};
var currentline=lines[i].split(",");
for(var j=0;j<headers.length;j++){
obj[headers[j]] = currentline[j];
}
result.push(obj);
}
return result; //JavaScript object
//return JSON.stringify(result); //JSON
}
var mainContent = readTextFile("main.csv");
})();
答案 0 :(得分:0)
你应该对异步工作有所了解。当您将处理程序设置为readystatechange
时,您只需从XMLHttpRequest订阅该事件,此事件触发时将调用您的函数。因此,此功能无法将某些内容返回给您。除非您指定了另一个名为callback
的函数,并在处理程序中调用它之后。
看看这个:
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
var fileContent;
rawFile.onreadystatechange = function () {
if(rawFile.readyState === 4) {
if(rawFile.status === 200 || rawFile.status == 0) {
var allText = rawFile.responseText;
fileContent =csvJSON(allText);
callback(fileContent);
}
}
}
当你想要请求时:
readTextFile('main.csv', function(data) {
console.log(data);
}
这是异步计算的工作原理。