例如,如果我将fileReader必须返回文件的内容值,我只返回空字符串。对我来说全局变量不可能使用,只有本地变量。有可能吗?
我错了什么?
修改
function onDeviceReady() {
console.log("==> DEVICE READY");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, fileErrorMSG);
}
function onFSSuccess(fs) {
fileSystem = fs;
}
function readlocalFile(fileName) {
var core = "";
fileSystem.root.getFile(fileName, {create: false}, function(f) {
f.file(function(e) {
var reader = new FileReader();
reader.onloadend = function(evt) {
var res = $.parseJSON(evt.target.result);
core = res;
};
reader.readAsText(e);
});//f.file()
}, fileErrorMSG);
return core;
}
function loadDefaultCore(url) {
if (url) {
var myCore = readlocalFile(url);
console.log(myCore); // **output - empty string!!!!!!!!**
} else {
alert('can not load default core');
}
}
谢谢!
答案 0 :(得分:0)
有很多事情需要考虑。简而言之:
这三个必须通过函数回调链接。
由于您的文件未被阅读,您将变空。 我跟随链接一个onFSSuccess函数后链断开,readLocalFile函数没有被调用,只需在将文件系统分配给fileSystem变量后添加它,我假设它是一个全局变量。或者调用你的函数loadDefaultCore,我不确定你真的想先调用哪一个。
如果您在每个函数中添加更多控制台日志消息,它将帮助您,以便您可以轻松地实际调试问题。
另外,您是否已将您的文档甚至监听器连接到设备就绪功能? 控制台中的任何消息,错误警告?
从phonegap文件api中,按照此操作,您将是安全的。检查doc,了解您正在使用的phonegap版本。
http://docs.phonegap.com/en/2.4.0/cordova_file_file.md.html#FileReader
<script type="text/javascript" charset="utf-8">
// Wait for Cordova to load //function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); }
// Cordova is ready //function onDeviceReady() { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); }
function gotFS(fileSystem) { fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail); }
function gotFileEntry(fileEntry) { fileEntry.file(gotFile, fail); }
function gotFile(file){ readDataUrl(file); readAsText(file); }
function readDataUrl(file) { var reader = new FileReader(); reader.onloadend = function(evt) { console.log("Read as data URL"); console.log(evt.target.result); }; reader.readAsDataURL(file); }
function readAsText(file) { var reader = new FileReader(); reader.onloadend = function(evt) { console.log("Read as text"); console.log(evt.target.result); }; reader.readAsText(file); }
function fail(evt) { console.log(evt.target.error.code); }
</script>