获取未定义的回调
Get undefined callback
我有这样的代码,当我控制台日志时,fileContent 给出了正确的输出,但是当我试图将它作为 return 时,它给出了错误。
我想在其他地方使用 csv 文件的内容functions.While 保持代码整洁。
;(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");
})();
你应该对异步工作有所了解。当您将处理程序设置为 readystatechange
时,您只是从 XMLHttpRequest 订阅该事件,当此事件触发时将调用您的函数。所以这个函数不能return 东西还给你。除非您指定另一个名为 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);
}
这就是异步计算的工作原理。
我有这样的代码,当我控制台日志时,fileContent 给出了正确的输出,但是当我试图将它作为 return 时,它给出了错误。
我想在其他地方使用 csv 文件的内容functions.While 保持代码整洁。
;(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");
})();
你应该对异步工作有所了解。当您将处理程序设置为 readystatechange
时,您只是从 XMLHttpRequest 订阅该事件,当此事件触发时将调用您的函数。所以这个函数不能return 东西还给你。除非您指定另一个名为 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);
}
这就是异步计算的工作原理。