Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cordova 3.4文件读取器不工作(无onloadend)_Javascript_Ios_Cordova_Filereader - Fatal编程技术网

Javascript Cordova 3.4文件读取器不工作(无onloadend)

Javascript Cordova 3.4文件读取器不工作(无onloadend),javascript,ios,cordova,filereader,Javascript,Ios,Cordova,Filereader,我正在将一个应用程序从phonegap 2.*更新到cordova 3.4 现在一切都很顺利,只是文件下载不起作用 我需要从internet下载一个文件(主机编辑)并将其存储为JSON文件,以便稍后处理内容。 下载工作正常,文件将显示在文件系统中,但FileReader不会触发onloadend事件 我尝试过一些事情,比如onprogress或onerror事件,还有file.toURI和FileReader.readAsDataURL——都没有效果。有人有什么想法吗 注意事项: var fil

我正在将一个应用程序从phonegap 2.*更新到cordova 3.4 现在一切都很顺利,只是文件下载不起作用

我需要从internet下载一个文件(主机编辑)并将其存储为JSON文件,以便稍后处理内容。 下载工作正常,文件将显示在文件系统中,但FileReader不会触发
onloadend
事件

我尝试过一些事情,比如
onprogress
onerror
事件,还有
file.toURI
FileReader.readAsDataURL
——都没有效果。有人有什么想法吗

注意事项:

var fileTransfer = new FileTransfer();

var loadingStatus = 0;
fileTransfer.onprogress = function (progressEvent) {

    // if we have the complete length we can calculate the percentage, otherwise just count up
    if (progressEvent.lengthComputable) {
        loadingStatus = Math.floor(progressEvent.loaded / progressEvent.total * 100);
    } else {
        loadingStatus++;
    }
    app.log('Transfer Progress: ' + loadingStatus);

};

fileTransfer.download(
    encodeURI('http://www.example.com/export'),
    'cdvfile://localhost/persistent/import.json',
    function (file) {

        var FileReader = new FileReader();

        FileReader.onloadend = function (evt) {
            app.log('Filereader onloadend');
            app.log(evt);
        };

        FileReader.readAsText(file);

    },
    function (error) {

        // FileTransfer failed
        app.log("FileTransfer Error: " + print_r(error));

    }
);
  • app.log
    可以看作是
    console.log
  • print\r
    在另一个文件中定义,工作正常
  • 下载的文件只有几kB,不应该是性能问题
  • 在iOS硬件上运行
完整代码(提取和缩短):

var fileTransfer = new FileTransfer();

var loadingStatus = 0;
fileTransfer.onprogress = function (progressEvent) {

    // if we have the complete length we can calculate the percentage, otherwise just count up
    if (progressEvent.lengthComputable) {
        loadingStatus = Math.floor(progressEvent.loaded / progressEvent.total * 100);
    } else {
        loadingStatus++;
    }
    app.log('Transfer Progress: ' + loadingStatus);

};

fileTransfer.download(
    encodeURI('http://www.example.com/export'),
    'cdvfile://localhost/persistent/import.json',
    function (file) {

        var FileReader = new FileReader();

        FileReader.onloadend = function (evt) {
            app.log('Filereader onloadend');
            app.log(evt);
        };

        FileReader.readAsText(file);

    },
    function (error) {

        // FileTransfer failed
        app.log("FileTransfer Error: " + print_r(error));

    }
);

目前无法验证这一点,但从3.0开始,Cordova将设备级API作为插件实现。使用命令行界面中描述的CLI的plugin命令为项目添加或删除此功能:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git
$ cordova plugin rm org.apache.cordova.core.file

您是否已将插件添加到项目中?

文件API已更新。见此帖:


当然,所有插件都已添加并运行,否则无法下载;-)嗯,你检查过onloadstart和onload事件是否触发了吗?事件没有触发,似乎没有Phillip的更改,
readAsText
函数根本没有被调用。遗憾的是,JavaScript或Cordova没有发出任何通知。