Javascript, jQuery, mehrere AJAX-Anfragen zur gleichen Zeit
function makeCall(file, handlerFile, sendMethod, formData) {
//console.log(instance.files);
$.ajax({
url: handlerFile,
type: sendMethod,
xhr: function() { //Custom XMLHttpRequest
var xhr = $.ajaxSettings.xhr();
if(xhr.upload) { //Check if upload property exists
xhr.upload.addEventListener('progress', progressHandlingFunction.bind(file)); //For handling the progress of the upload
//xhr.upload.addEventListener('loadend', successHandler.bind(xhr));
}
//console.log(xhr);
return xhr;
},
beforeSend: beforeSendHandler.bind(file),
success: completeHandler.bind(file),
//error: errorHandler,
data: formData, //Form data
dataType: 'json',
cache: true,
//async: false,
contentType: false,
processData: false
});
}
$(".afu-input").on('change', function() {
var i = 0;
var length = this.files.length;
var files = this.files;
var calling = setInterval(function() {
var file = files[i];
console.log(file);
uid = generateUniqueId();
file.id = uid;
var formData = null;
formData = new FormData();
formData.append(i, file);
formData.append(i, [uid]);
makeCall(file, handlerFile, sendMethod, formData);
i++;
if (i >= length) {
clearInterval(calling);
}
}, 2000); //Delay is for testing. Normaly there is no delay
}
Ich versuche zum hochladen von Datei eins nach dem anderen. Aber das problem ist, dass ajax-Anfrage senden richtig, aber immer nur einen(ersten) Daten zurückgeben.
Mein Ziel ist es, ein Skript erstellen, die uploads von Bildern(und später auch andere Dateien) auf input[type=file] ändern. Ich habe versucht, mehrere Dateien hochladen, die mit einer Anfrage, aber progress-Ereignis registrieren, Sie als ein. Ich hatte die Idee zu Segment(chunk) Dateien in Stücke ant zu senden, aber diese Variante scheint einfacher(nur brauchen, um es zu arbeiten, dann kann ich es verbessern). Danke.
- Gibt es einen Grund für die 2 Sekunden Verzögerung zwischen den uploads?
- Nop, nur zum testen, ich war auf der Suche nach problem und Hinzugefügt 2s Verzögerung. Gestern war ich googeln eine Menge, und fand, dass es getan werden kann, mit der Latenten in jQuery, ich werde es bald testen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist einfach zu machen, mit jQuery.wenn();
Ajax-Aufrufe können eine beliebige Zahl. So müssen Sie es mit apply(); und erstellen Sie ein array von ajax-Aufrufe. Jetzt code sieht wie folgt aus: