Javascript 使用PhoneGap加载多个文件时进行检查
我一直在使用PhoneGap2.9.0(内置)从网站下载文件,并将其存储在android设备上的SD卡上 我正在寻找一个解决方案,下载多个文件,并检查所有这些请求已成功完成 有人告诉我,使用可以做到这一点,但我还没有在任何代码中使用它,我正在努力解决这个问题 现有代码在理论上运行良好,但仅检查阵列中的最后一次下载是否成功下载,但有时最后一次下载会在其他下载之前成功返回 我的代码如下所示:Javascript 使用PhoneGap加载多个文件时进行检查,javascript,android,jquery,ios,cordova,Javascript,Android,Jquery,Ios,Cordova,我一直在使用PhoneGap2.9.0(内置)从网站下载文件,并将其存储在android设备上的SD卡上 我正在寻找一个解决方案,下载多个文件,并检查所有这些请求已成功完成 有人告诉我,使用可以做到这一点,但我还没有在任何代码中使用它,我正在努力解决这个问题 现有代码在理论上运行良好,但仅检查阵列中的最后一次下载是否成功下载,但有时最后一次下载会在其他下载之前成功返回 我的代码如下所示: var ft = new FileTransfer(); var online = [ 'http:
var ft = new FileTransfer();
var online = [
'http://google.com/img/1.jpg',
'http://google.com/img/2.jpg',
'http://google.com/img/3.jpg'
];
var sdcard = 'file:///storage/sdcard0/';
$.each( online, function(k,v) {
ft.download(
online[k],
sdcard,
win,
fail
);
}
var win = function(success, counter){
// check if counter is last element in array
// redirect user to page if last element
}
var fail = function(error){
console.log(error);
}
var remoteFiles = [];
function downloadRemotePDF() {
var local2User = JSON.parse( localStorage["locallessons"] );
$.each(local2User, function(key) {
remoteFiles.push(optionsJSON + local2User[key].idcountries + '/' + local2User[key].idcurriculum + '/' + local2User[key].idoptions + '/pdf/' + local2User[key].pdfname);
}
downloadFile();
}
function downloadFile() {
// No files left, stop downloading
if (remoteFiles.length == 0) {
return;
}
var remoteFile = remoteFiles.pop();
var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(localFileName, {create: true, exclusive: false}, function(fileEntry) {
var localPath = fileEntry.fullPath;
if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
localPath = localPath.substring(7);
}
var ft = new FileTransfer();
ft.download(remoteFile, localPath, function(entry) {
// Do what you want with successful file downloaded and then
// call the method again to get the next file
downloadFile();
}, fail);
}, fail);
}, fail);
}
下面是jquery的一个示例 一个简单的代码(不是你的,用来解释“何时”) 这是一把小提琴: 以及一个带有when()的简单代码。done()
下面是jquery的一个示例 一个简单的代码(不是你的,用来解释“何时”) 这是一把小提琴: 以及一个带有when()的简单代码。done()
我最终使用了simon mcondalds解决方案,而没有使用jQuery.com 基本上,当一个项目被成功检索时,将我必须从web上获取的所有项目放入一个数组中,只需从数组中删除该项目,然后再次调用相同的函数。最终,array.length将 此处的示例代码:
var ft = new FileTransfer();
var online = [
'http://google.com/img/1.jpg',
'http://google.com/img/2.jpg',
'http://google.com/img/3.jpg'
];
var sdcard = 'file:///storage/sdcard0/';
$.each( online, function(k,v) {
ft.download(
online[k],
sdcard,
win,
fail
);
}
var win = function(success, counter){
// check if counter is last element in array
// redirect user to page if last element
}
var fail = function(error){
console.log(error);
}
var remoteFiles = [];
function downloadRemotePDF() {
var local2User = JSON.parse( localStorage["locallessons"] );
$.each(local2User, function(key) {
remoteFiles.push(optionsJSON + local2User[key].idcountries + '/' + local2User[key].idcurriculum + '/' + local2User[key].idoptions + '/pdf/' + local2User[key].pdfname);
}
downloadFile();
}
function downloadFile() {
// No files left, stop downloading
if (remoteFiles.length == 0) {
return;
}
var remoteFile = remoteFiles.pop();
var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(localFileName, {create: true, exclusive: false}, function(fileEntry) {
var localPath = fileEntry.fullPath;
if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
localPath = localPath.substring(7);
}
var ft = new FileTransfer();
ft.download(remoteFile, localPath, function(entry) {
// Do what you want with successful file downloaded and then
// call the method again to get the next file
downloadFile();
}, fail);
}, fail);
}, fail);
}
我最终使用了simon mcondalds解决方案,而没有使用jQuery.com 基本上,当一个项目被成功检索时,将我必须从web上获取的所有项目放入一个数组中,只需从数组中删除该项目,然后再次调用相同的函数。最终,array.length将 此处的示例代码:
var ft = new FileTransfer();
var online = [
'http://google.com/img/1.jpg',
'http://google.com/img/2.jpg',
'http://google.com/img/3.jpg'
];
var sdcard = 'file:///storage/sdcard0/';
$.each( online, function(k,v) {
ft.download(
online[k],
sdcard,
win,
fail
);
}
var win = function(success, counter){
// check if counter is last element in array
// redirect user to page if last element
}
var fail = function(error){
console.log(error);
}
var remoteFiles = [];
function downloadRemotePDF() {
var local2User = JSON.parse( localStorage["locallessons"] );
$.each(local2User, function(key) {
remoteFiles.push(optionsJSON + local2User[key].idcountries + '/' + local2User[key].idcurriculum + '/' + local2User[key].idoptions + '/pdf/' + local2User[key].pdfname);
}
downloadFile();
}
function downloadFile() {
// No files left, stop downloading
if (remoteFiles.length == 0) {
return;
}
var remoteFile = remoteFiles.pop();
var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(localFileName, {create: true, exclusive: false}, function(fileEntry) {
var localPath = fileEntry.fullPath;
if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
localPath = localPath.substring(7);
}
var ft = new FileTransfer();
ft.download(remoteFile, localPath, function(entry) {
// Do what you want with successful file downloaded and then
// call the method again to get the next file
downloadFile();
}, fail);
}, fail);
}, fail);
}
也许如果你把所有的动作都放在jquery“when()”?嗨,Jahnux,如果你能给我一个例子说明这是如何工作的,那就太好了。也许如果你把所有的动作都放在jquery“when()”?嗨,Jahnux,如果您能向我展示一个如何工作的示例,那就太好了。我想展示一个消息文件X of X,正在查看OnProgress事件,不想使用承诺。您的解决方案很优雅,我对其进行了修改以传递正在下载的文件。谢谢你的发帖!我想显示一个消息文件X/X,正在查看OnProgress事件,不想使用承诺。您的解决方案很优雅,我对其进行了修改以传递正在下载的文件。谢谢你的发帖!