Hi,
ich habe einen Drag And Drop Upload geschrieben und möchte jetzt in einer selbst erstellten MessageBox anzeigen, welches Bild Fehler frei geuploadet wurde und welches einen fehler verursacht hat.
Problem an der Sache ist, dass nur das letzte Bild das richtige Icon bekommt. Alle anderen bleiben bei dem Load Circle(gif) beim debuggen habe ich schon gesehen das obwohl die anderen Bilder früher fertig sind, werden die immer überschrieben oder garnicht erst aufgerufen?
in der response funktion habe ich einen "console.log(liId);" dieser müsste bei 2 Bildern auch 2 mal aufgerufen werden und einmal "image_0" und "image_1" zurück gegben. Leider wird er nur einmal aufgerufen und gibt mir "image_1" zurück (Was auch erklärt warum nur das letzte bild das richtig icon bekommt). Die Frage ist aber, wie kann ich das umgehene? gibs da irgend eine asynchrone möglichkeit?
Die drop Funktion checkt wieviele elemente geuploadet werden sollen, und ruft so oft wie nötig die upload funktion auf
Alles anzeigen
die upload funktion sendet die Daten zu einem php script für den fertigen Upload.
onreadystatechange wird jetzt angewiesen die funktion response auf zu rufen wenn daten ankommen:
Alles anzeigen
ich habe einen Drag And Drop Upload geschrieben und möchte jetzt in einer selbst erstellten MessageBox anzeigen, welches Bild Fehler frei geuploadet wurde und welches einen fehler verursacht hat.
Problem an der Sache ist, dass nur das letzte Bild das richtige Icon bekommt. Alle anderen bleiben bei dem Load Circle(gif) beim debuggen habe ich schon gesehen das obwohl die anderen Bilder früher fertig sind, werden die immer überschrieben oder garnicht erst aufgerufen?
in der response funktion habe ich einen "console.log(liId);" dieser müsste bei 2 Bildern auch 2 mal aufgerufen werden und einmal "image_0" und "image_1" zurück gegben. Leider wird er nur einmal aufgerufen und gibt mir "image_1" zurück (Was auch erklärt warum nur das letzte bild das richtig icon bekommt). Die Frage ist aber, wie kann ich das umgehene? gibs da irgend eine asynchrone möglichkeit?
Die drop Funktion checkt wieviele elemente geuploadet werden sollen, und ruft so oft wie nötig die upload funktion auf
Quellcode
- drop = function(event) {
- //$('.'+place).css('background-image','url(images/ajax-loader.gif)');
- if(!MessageBox.Show("upload","Upload","Queue:","ok")) {
- alert("Die MessageBox konnte nicht erstellt werden!");
- return false;
- }
- event.preventDefault();
- var dt = event.dataTransfer;
- var files = dt.files;
- for (var i = 0; i<files.length; i++) {
- $('#uploadQueue').append('<li id="image_'+i+'">'+files[i].name+'</li>');
- var file = files[i];
- upload(file, i);
- }
- }
die upload funktion sendet die Daten zu einem php script für den fertigen Upload.
Quellcode
- upload = function(file, id) {
- xhr = new XMLHttpRequest();
- xhr.open('POST', targetPHP+'?up=true', true);
- xhr.setRequestHeader('UP-FILENAME', file.name);
- xhr.setRequestHeader('UP-SIZE', file.size);
- xhr.setRequestHeader('UP-TYPE', file.type);
- xhr.setRequestHeader('UP-ID', id);
- xhr.onreadystatechange = response;
- xhr.send(file);
- }
onreadystatechange wird jetzt angewiesen die funktion response auf zu rufen wenn daten ankommen:
Quellcode
- function response() {
- if((xhr.readyState==4) && (xhr.status==200)) {
- responseTxt = xhr.responseText;
- responseArray = responseTxt.split(' :|: ',2);
- if((responseArray[0] != '') && (responseArray[1] != '')) {
- liId = "image_"+responseArray[0];
- console.log(liId);
- switch(responseArray[1]) {
- case "1":
- $('#'+liId).css('background-image', 'url(../img/upload_check.png)');
- break;
- case "2":
- $('#'+liId).css('background-image', 'url(../img/upload_alert.png)');
- break;
- case "3":
- $('#'+liId).css('background-image', 'url(../img/upload_error.png)');
- break;
- case "4":
- $('#'+liId).css('background-image', 'url(../img/upload_error.png)');
- break;
- }
- }
- }
- }