Javascript 获取未定义的回调
我有这样的代码,当我控制台记录fileContent时,它给出了正确的输出,但当我尝试将其作为返回时,它给出了错误 我想在其他函数中使用csv文件的内容。同时保持代码干净Javascript 获取未定义的回调,javascript,csv,asynchronous,xmlhttprequest,Javascript,Csv,Asynchronous,Xmlhttprequest,我有这样的代码,当我控制台记录fileContent时,它给出了正确的输出,但当我尝试将其作为返回时,它给出了错误 我想在其他函数中使用csv文件的内容。同时保持代码干净 ;(function(){ function readTextFile(file) { var rawFile = new XMLHttpRequest(); rawFile.open("GET", file, true); var fileContent; rawFile.onreadystatec
;(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");
})();
;(功能(){
函数readTextFile(文件)
{
var rawFile=new XMLHttpRequest();
打开(“GET”,file,true);
var文件内容;
rawFile.onreadystatechange=函数()
{
if(rawFile.readyState==4)
{
if(rawFile.status==200 | | rawFile.status==0)
{
var allText=rawFile.responseText;
fileContent=csvJSON(allText);
返回文件内容;
}
}
}
rawFile.send(空);
}
函数csvJSON(csv){
变量行=csv.split(“\n”);
var结果=[];
var headers=行[0]。拆分(“”,“”);
对于(var i=1;i您应该了解一些异步工作。当您将handler设置为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);
}
异步计算就是这样工作的