如何从PhoneGap iOS中的函数返回具有FileReader的FileContent?

如何从PhoneGap iOS中的函数返回具有FileReader的FileContent?,ios,file,cordova,filereader,Ios,File,Cordova,Filereader,例如,如果我希望fileReader必须返回file的内容值,那么我只返回空字符串。全局变量对我来说不可能使用,只有局部变量。可能吗? 我错了什么 编辑: function onDeviceReady() { console.log("==> DEVICE READY"); window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, fileErrorMSG); }

例如,如果我希望fileReader必须返回file的内容值,那么我只返回空字符串。全局变量对我来说不可能使用,只有局部变量。可能吗?
我错了什么

编辑:

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

谢谢
  • 首先,要读取文件,需要获取文件系统
  • 第二,如果成功,您需要使用文件系统获取文件条目
  • 第三,成功后使用文件条目读取文件
  • 这三个函数必须通过函数回调链接起来

    由于文件未被读取,您将变为空。 在onFSSuccess函数断开后,我遵循这个链,readLocalFile函数没有被调用,只需在您将文件系统分配给文件系统变量(我假定它是全局变量)后添加它。或者调用你的函数loadDefaultCore,我不确定你真的想先调用哪一个

    如果在每个函数中添加更多控制台日志消息,那么它将帮助您轻松地调试问题

    另外,您是否将文档甚至侦听器连接到设备就绪功能? 控制台中是否有任何消息、错误和警告

    从phonegap文件api中,遵循此操作,您将安全无虞。检查您正在处理的phonegap版本的文档

    
    //等待Cordova加载//函数onLoad(){document.addEventListener(“deviceready”,onDeviceReady,false);}
    //Cordova已准备就绪//函数ondevicerady(){window.requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,fail);}
    函数gotFS(fileSystem){fileSystem.root.getFile(“readme.txt”,null,gotFileEntry,fail);}
    函数gotFileEntry(fileEntry){fileEntry.file(gotFile,fail);}
    函数gotFile(file){readDataUrl(file);readAsText(file);}
    函数readDataUrl(文件){var reader=new FileReader();reader.onloadend=function(evt){console.log(“读取为数据URL”);console.log(evt.target.result);};reader.readAsDataURL(文件);}
    函数readAsText(文件){var reader=new FileReader();reader.onloadend=function(evt){console.log(“读取为文本”);console.log(evt.target.result);};reader.readAsText(文件);}
    函数失败(evt){console.log(evt.target.error.code);}
    
    <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>