Ich beabsichtige, ein Array von Dateien mit jQuery hochzuladen.Wie zu verwenden, wenn dann Datei-Upload sequenziell in einer Funktion senden, die auch ein verzögertes Versprechen ist?
Diese Absicht ist in eine Funktion namens uploadFilesUsingAjax()
verpackt;
Ich muss warten, bis alle Dateien erfolgreich hochgeladen wurden, bevor Sie etwas anderes tun.
Innen uploadFilesUsingAjax()
,
schrieb ich meinen Code auf diese Weise
function uploadFilesUsingAjax() {
var files = pages; // pages is a global variable which is an array of files
var url = "https://stackoverflow.com/users/" + currentUser.id + "/files.json";
var type = "POST";
console.info('files length:' + files.length);
if (files.length > 0) {
var promises=[];
for (var i = 0; i < files.length; i++) {
var data = new FormData();
var postData = {};
var file = files.getByIndex(i);
var key = i + 1;
if (typeof (file.id) !== "undefined" && file.id > 0) {
data.append(key, JSON.stringify(file));
} else {
data.append(key, file);
}
var request = $.ajax({
//this is the php file that processes the data
url: url,
//POST method is used
type: type,
//pass the data
data: data,
//Do not cache the page
cache: false,
xhr: function() {
// custom xhr
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload) { // check if upload property exists
myXhr.upload.addEventListener('progress',updatePagesProgress, false); // for handling the progress of the upload
}
return myXhr;
},
// DO NOT set the contentType and processData
// see http://stackoverflow.com/a/5976031/80353
contentType: false,
processData: false,
//success
success: function (json) {
// json is already an object thanks to cakephp code to serialize
//if POST is a success expect no errors
if (json.error == null && json.result != null) {
currentUser = json.result.User;
// error
} else {
alert(json.error);
}
}
});
promises.push(request);
}
var promise = promises[0];
for (var i = 1; i < promises.length; i++) {
promise = promise.then(promises[i]);
}
return promise.done(function() { console.log('all!')});
Leider habe ich nicht in der Lage war, eine Menge von Dateien zu laden, bevor ich zum Erfolg Seite umgeleitet wurde.
Ich habe verschiedene StackOverflow-Lösungen ausprobiert, wie man das macht. Bis jetzt funktioniert nichts. Bitte beraten.
Einige Codes wurden abgeschnitten, um Platz zu sparen.
ich habe ein kleines Problem mit der '.map', weil die URL unterschiedlich sein können, je nachdem, was ich will die uploadFilesUsingAjax() verwenden. Wie überwinde ich diese Situation? –
Sie ordnen ein Array von _stuff_ einem Array von Anforderungsaufgaben zu. Sie haben Zugriff auf das Dateiobjekt - Sie können '.map' auf eine andere URL basierend auf einer Eigenschaft des' file' Objekts, die an die Funktion, die Sie '.map' übergeben, übergeben. –
Entschuldigung für den früheren Kommentar. Ich weiß, wie ich das Problem umgehen kann. Ich habe stattdessen Alias-Funktionen geschrieben. Ich habe versucht, eine zusätzliche Klammer hinzuzufügen, die Sie in Ihrer Antwort fehlten. BUt konnte nicht, weil der StackOverflow verlangt, dass ich mindestens 6 Zeichen hinzufüge. Sie fehlen im 'd.reject (new Error (" Uploadfiles mit keine Dateien zum Hochladen "));' Sollte am Ende doppelte Klammern sein. –