在应用程序重新启动之前不会显示对文件的修改(文件API)

时间:2015-07-23 09:47:35

标签: javascript ajax cordova phonegap-plugins fileapi

我正在使用PhoneGap和File API构建一个基本的Ios应用程序来下载和更新XML文件。

下载部分使用Ajax调用完成,并使用FileEntry对象完成更新。

这就是它的样子:

$.ajax({
        type: "GET",
        url: "https://site/folder/GetFluxXmlServlet",
        dataType: "text",

        beforeSend: function () {
            Results.innerHTML = 'Loading...<br>';
        },

        success: function (MAJ) {

            var content = MAJ;

            document.addEventListener("deviceready", checkIfFileExists, false);

            function checkIfFileExists() {
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) {
                    fileSystem.root.getFile("global.xml", { create: false }, fileExists, fileDoesNotExist);
                }, getFSFail);
            }

            function fileExists(fileEntry) {
                fileEntry.createWriter(truncateFile, fileDoesNotExist);
            }

            function truncateFile(writer) {
                writer.onwriteend = function (evt) {
                    console.log("Writer" + evt.code);
                    writer.seek(0);
                    writer.onwriteend = function (evt) {
                        console.log("Changed" + evt.code);
                    };
                    writer.write(content);
                };
                writer.truncate(0);
            }

            function fileDoesNotExist() {

                document.addEventListener("deviceready", onDeviceReady, false);

                function onDeviceReady() {
                    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onSuccess, onError);
                }

                function onSuccess(fileSystem) {

                    var directoryEntry = fileSystem.root;

                    directoryEntry.getFile("global.xml", {create: true, exclusive: false}, function (fileEntry) {
                        fileEntry.createWriter(function (writer) {
                            writer.write(content);
                        }, function (e) {
                            console.log("Error :" + e.code);
                        });
                    }, function (e) {
                        console.log("Error :" + e.code);
                    });
                }

                function onError(evt) {
                    console.log("Error :" + evt.code);
                }
            }

            function getFSFail(evt) {
                console.log(evt.target.error.code);
            }
        },

        complete: function () {
            Results.innerHTML = 'Success';
            window.location.reload(true);
        }
    })
  1. Ajax call
  2. 检索数据
  3. 如果文件存在,我们将其截断并写入新数据
  4. 如果文件不存在,我们创建它并写入数据
  5. 重新加载页面
  6. 所有这一切都运行正常,但是当对文件(服务器端)进行修改并点击我的更新按钮时,我不会在重新启动应用程序之前得到更改。

    我试过了:

    • 删除文件并重新创建
    • 我检查了元数据
    • 我更改了文件路径
    • 等等...

    总而言之,创建的文件由定义如下的全局变量中的其他Ajax方法调用:

    window.global = fileEntry.toURL();
    

    这会影响新数据的恢复,还是有更好的方法来更新文件?

1 个答案:

答案 0 :(得分:1)

在推断我的研究后,我发现Ajax请求正在cached,所以我只是添加:

$(document).ready(function() {
    $.ajaxSetup({ cache: false });
});

在我的Javascript文件的开头。

了解更多信息: http://www.w3schools.com/jquery/ajax_ajaxsetup.asp