我尝试使用Phonegap getFile
函数在我的iOS应用程序(phonegap 2.1 + jquerymobile)中读取文件,但我总是遇到此错误:
Error in error callback: File3 = TypeError: 'undefined' is not an object
我的文件位于www/data/datajson.txt
并包含一些json数据。
我的代码:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
//get www folder path
var path = window.location.pathname;
path = path.substr( path, path.length - 10 );
var pathwww = path;
console.log(pathwww); /* /var/mobile/Applications/{ID}/{APPNAME}.app/www/ */
fileSystem.root.getFile("file//"+pathwww+"data/datajson.txt", null, gotFileEntry, fail);
// result : Error in error callback: File3 = TypeError: 'undefined' is not an object
pathwww.getFile("file///data/datajson.txt", null, gotFileEntry, fail);
// result : Error in success callback: File2 = TypeError: 'undefined' is not a function
}
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);
}
我不明白为什么我无法在我的www
文件夹中导航并阅读我的datajson.txt
文件。
谢谢你的帮助。
答案 0 :(得分:2)
如果你想从你的应用程序中获取一个文本文件,你可以通过'ajax'调用来获取它
$.ajax({
url : 'data/datajson.txt',
type : "get",
dataType : "json",
success : function(data, textStatus, jqXHR) {
console.log('data loaded ' + JSON.stringify(data));
},
error : function(jqXHR, textStatus, errorThrown) {
console.log('error loading data :' + errorThrown);
}
});
修改强>
如果您要编写文件,则无法将其写入与应用相同的位置。您需要将它们写入应用程序的Document文件夹。这是在安装时创建的,因此您无法将文件放在XCode中。您必须在安装后复制文件。
当您致电window.requestFileSystem
答案 1 :(得分:1)
假设您的HTML文件位于文件夹www
中,您可以尝试以下操作:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
fileSystem.root.getDirectory("data", {create: true}).getFile("datajson.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);
}
尝试让我知道这是否有效。