Array wird falsch gefüllt

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich habe hier eine eigentlich simple Funktion, die ein Array befüllen soll, anhand dessen später verschiedene Button ausgeblendet werden.
Javascript:
function mkuidext(pid, uidauftrag, nachtraeglich){
    $.ajax({
        type: "POST",
        url: "checkuid.php",
        data: {pid: pid, auftrag: uidauftrag},
        success: function(data){
// returnCode ist Teil der zurückgegebenen Daten
            var hideStatus = [];
            var basiscode = returnCode.substr(0,3);
            if (returnCode.substr(0,4) == '2000' || returnCode.substr(0,4) == '2220')
                hideStatus = [3,4,5];
            else{
                switch(basiscode){
                    case '200':
                        if (nachtraeglich != 'N')
                            hideStatus = [3,4,5,8];
                        else
                            hideStatus = [1,3,4,5,8];
                        break;
                    case '201':
                        hideStatus = [1,2,3,4,7,8];
                        break;
                    case '202':
                        hideStatus = [1,2,3,7,8];
                        break;
                }
            }
            hideStatus.forEach(function(stat){
                $("#uidbuttB"+stat+uidauftrag).hide();
            })
       }
   })
}
(Das hier ist auf das Wesentliche reduziert.)
Es funktioniert eigentlich wunderbar. Nur wenn als Basiscode 200 zurück kommt, wird die Abfrage auf nachtraeglich zwar ausgeführt, es wird aber immer hideStatus = [3,4,5,8]; ausgeführt. Ich habe schon alle Varianten ausprobiert, auf == 'N' und auf != 'N' abgefragt, für den Fall, daß er in einem case kein if mag und nur die erste Zuweisung nimmt. Ich habe mir nach den Zuweisungen und nach dem switch hideStatus ausgeben lassen. Es ist immer "3,4,5,8".
In jedem anderen Fall werden die korrekten Werte in das Array eingetragen, nur beim if nicht.

Für den unwahrscheinlichen Fall, daß der Browser trotz PHP irgendwas im Cache behält, habe ich auch schon einen ganz jungfräulichen Browser probiert, der noch nie etwas mit der Seite zu tun hatte - auch da das selbe Ergebnis. Ich habe keine Idee mehr, woran es jetzt noch scheitert.
 
Was kommt denn heraus wenn Du dir nachtraeglich ausgeben lässt?

Für den unwahrscheinlichen Fall, daß der Browser trotz PHP irgendwas im Cache behält
Nach meiner Erfahrung ist das durchaus nicht unwahrscheinlich sondern bei Ajax die Regel. Versuche, einen Zeitstempel an die URL anzuhängen:
Code:
url: "checkuid.php?t=" + Date.now(),
Ich glaube es gibt auch einen Parameter dafür aber den habe ich noch nicht ausprobiert.
 
Was kommt denn heraus wenn Du dir nachtraeglich ausgeben lässt?
Das wird korrekt übernommen. Ich habe mir den Wert sowohl am Anfang der Funktion als auch in den beiden if-Zweigen ausgeben lassen. Immer korrekt. Es wird ja auch der korrekte Zweig ausgewählt.

Beim Cache hatte ich eher an irgendwelche Variablen gedacht. Von der Ajax Funktion kommt der richtige Wert zurück. (Es geht dabei um Abfragen von Steuernummern beim BzSt. Wenn ich da einen Fehler provoziere, werden die richtigen Werte übergeben)
 
Hat er auch korrekt gemacht. Ich hab mir mal so die Daten ausgeben lassen:
Javascript:
if (nachtraeglich != 'N'){
    hideStatus = [3,4,5,8];
    alert (nachtraeglich+hideStatus);
}else{
    hideStatus = [1,3,4,5,8];
    alert (nachtraeglich+hideStatus);
}
Und je nachdem wurde 3,4,5,8 bzw. N3,4,5,8. Es hätte aber N1,3,4,5,8 heißen müssen.
 
Hm, stehe ratlos davor. Ich hatte einen Testcode gemacht:
Code:
        const basiscode = '200',
            nachtraeglich = 'N';
        let hideStatus;
        switch (basiscode) {
            case '200':
                if (nachtraeglich != 'N')
                    hideStatus = [3, 4, 5, 8];
                else
                    hideStatus = [1, 3, 4, 5, 8];
                break;
            case '201':
                hideStatus = [1, 2, 3, 4, 7, 8];
                break;
            case '202':
                hideStatus = [1, 2, 3, 7, 8];
                break;
        }
        console.log(hideStatus);
und der funktioniert einwandfrei, es wird 1,3,4,5,8 ausgegeben. Vielleicht ein Leerzeichen, Tab oder unsichtbares Steuerzeichen drin? Mal einen Dump machen:
Code:
        let dump = '';
        for (let i = 0; i < nachtraeglich.length; i++) {
            dump += nachtraeglich[i].charCodeAt(0).toString(10) + " ";
        }
        console.log(nachtraeglich);
        console.log(dump);
        switch (basiscode) {
            case '200':
                if (nachtraeglich != 'N')
                    hideStatus = [3, 4, 5, 8];
                else
                    hideStatus = [1, 3, 4, 5, 8];
                break;
            case '201':
                hideStatus = [1, 2, 3, 4, 7, 8];
                break;
            case '202':
                hideStatus = [1, 2, 3, 7, 8];
                break;
        }
        console.log(hideStatus);
 
Ich hab es gefunden. Viel weiter oben, wo die Funktionsaufrufe gebaut werden, war ein Leerzeichen mit drin.:mad:
 
Zurück