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

时间:2013-09-12 13:42:49

标签: ios file cordova filereader

例如,如果我将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');    
    }    
}    

谢谢!

1 个答案:

答案 0 :(得分:0)

有很多事情需要考虑。简而言之:

  1. 首先,要读取需要获取文件系统的文件。
  2. 其次,成功时,您需要使用文件系统获取文件条目。
  3. 第三,成功时使用文件条目读取文件。
  4. 这三个必须通过函数回调链接。

    由于您的文件未被阅读,您将变空。 我跟随链接一个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>