foreach behält die Reihenfolge nicht

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich habe hier eine Kombination aus Ajax und PHP, wobei Dateien aus einem Verzeichnis nach bestimmten Kriterien aufgelistet werden sollen. Das funktioniert auch völlig korrekt bis auf die Tatsache, daß die Antworten nicht in der Reihenfolge kommen, in der sie angefordert werden.

Wird die Seite aufgerufen, wird die Schleife das erste mal aufgerufen und die Antworten kommen in der (meistens) richtigen Reihenfolge. Nun können aber über ein Ajax Upload für den Bereich "sonst" zusätzliche Dateien hochgeladen werden. Im Anschluß wird das Anzeige-Div geleert und die Schleife erneut aufgerufen. Und da bringt er alles durcheinander.

Ich habe mir mit alert auch schon mal die Reihenfolge der Aufrufe anzeigen lassen und extra jedesmal zwei Sekunden gewartet, damit die sich nicht evtl. gegenseitig überholen. Hat auch nix gebracht.

Ich habe auch mal statt foreach eine normale for Schleife genommen und die Ausführung des listfile() Aufrufs mit setTimeout() verzögert. Ergebnis war, daß die Verzögerung überhaupt nicht beachtet wurde. Es gab aber auf der Konsole auch keine Fehlermeldung.

Das Script sieht so aus:
Javascript:
function listfile(typ){
    $.ajax({
        type: "POST",
        url: "listfiles.php",
        data: "kvid="+kvid+"&typ="+typ,
        success: function(data){
            $('#dateien').append(data);
        }
    });
}

$(document).ready(function() {
    var typliste = ['kv', 'abh', 'bza', 'kau', 'aas', 'ueb', 'pass', 'cmr', 'sped', 'gb', 'sonst'];
    typliste.forEach(listfile);
});

$(document).ready(function(){
    $("#sonstupload").uploadFile({
        url:"kv-upload.php?typ=sonst&fall="+kvid,
        returnType:"json",
        multiple:true,
        fileName:"myfile",
        allowedTypes:"jpg,jpeg,png,pdf",
        maxFileSize:8000000,
        afterUploadAll:function(obj){
            $('#dateien').html('');
            var typliste = ['kv', 'abh', 'bza', 'kau', 'aas', 'ueb', 'pass', 'cmr', 'sped', 'gb', 'sonst'];
            typliste.forEach(listfile);
        }
    });
});

Hat jemand eine Idee, warum das so durcheinander läuft?

Schönes Wochenende,
Sprint
 
Hallo Sprint,

$.ajax arbeitet per default asyncron. Erweitere Deinen Request mal um folgenden Parameter:

Javascript:
...
async:false,
...

VG
 
Zurück