在应用程序重新启动之前不会显示对文件的修改(文件 API)
Modifications on files are not displayed until application restart (File API)
我正在构建一个基本的 Ios 应用程序,使用 PhoneGap 和 File API 下载和更新 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);
}
})
- Ajax 通话
- 检索数据
- 如果文件存在,我们截断它并写入新数据
- 如果文件不存在,我们创建它并写入数据
- 重新加载页面
所有这些工作正常,但是当对文件(服务器端)进行修改并且我单击我的更新按钮时在应用程序重新启动之前我没有得到更改。
我试过了:
- 删除文件并重新创建它
- 我检查了元数据
- 我更改了文件路径
- 等等...
总而言之,创建的文件由其他 Ajax 方法在定义如下的全局变量中调用:
window.global = fileEntry.toURL();
这会影响新数据的恢复,还是有更好的更新文件的方法?
在推断我的研究后,我发现 Ajax 请求正在 cached 所以我简单地添加了:
$(document).ready(function() {
$.ajaxSetup({ cache: false });
});
在我的 Javascript 文件的开头。
我正在构建一个基本的 Ios 应用程序,使用 PhoneGap 和 File API 下载和更新 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);
}
})
- Ajax 通话
- 检索数据
- 如果文件存在,我们截断它并写入新数据
- 如果文件不存在,我们创建它并写入数据
- 重新加载页面
所有这些工作正常,但是当对文件(服务器端)进行修改并且我单击我的更新按钮时在应用程序重新启动之前我没有得到更改。
我试过了:
- 删除文件并重新创建它
- 我检查了元数据
- 我更改了文件路径
- 等等...
总而言之,创建的文件由其他 Ajax 方法在定义如下的全局变量中调用:
window.global = fileEntry.toURL();
这会影响新数据的恢复,还是有更好的更新文件的方法?
在推断我的研究后,我发现 Ajax 请求正在 cached 所以我简单地添加了:
$(document).ready(function() {
$.ajaxSetup({ cache: false });
});
在我的 Javascript 文件的开头。