Tabelleneinträge hinzufügen

Headymaster

Erfahrenes Mitglied
Hallo,

Also ich habe in meinem AdminPanel ne Tabelle mit sehr vielen Schlüsseln.
Eine Spalte stellt die Bezeichnung zu den jeweiligen Schlüsseln dar unter der dann eine 2. Tabelle eingeschoben wird.
So nun möchte ich nach meinem Ajax-Request dass ohne Pagereload die eingetragenen Sachen in die 2. Tabele eingetragen werden.
Im FF kein Problem, nur im IE funktioniert es nicht.

Hier mal der JS-Code, der das ganze entwerder in die 2. Tabelle einträgt, wenn der eingetragenen Datensatz noch nicht existiert und sonst einen existierenden Datensatz ändert.
Das Ändern funktioniert übrigens auch im IE hal nur das Hinzufügen nicht.

Code:
// Wenn row existiert, diese updaten ansonsten neue Reihe anhängen
                if (row === null) {
                    // neue Reihe anhängen
                    var table = dojo.byId(response[3]);
                    var body = table.childNodes[7].childNodes[1].childNodes[5];
                    
                    var tr = document.createElement('tr');
                    tr.setAttribute('id', 'MV_'+response[2]);
                    
                    // Kunde
                    var td1 = document.createElement('td');
                    var b1 = document.createElement('b');
                    b1.appendChild(document.createTextNode('Kunde: '));
                    td1.appendChild(b1);
                    td1.appendChild(document.createTextNode(response[4]));
                    tr.appendChild(td1);
                    
                    // Aktion
                    var td2 = document.createElement('td');
                    var b2 = document.createElement('b');
                    b2.appendChild(document.createTextNode('Aktion: '));
                    td2.appendChild(b2);
                    td2.appendChild(document.createTextNode(response[5]));
                    tr.appendChild(td2);
                    
                    // Formular Ignorieren
                    var td3 = document.createElement('td');
                    var b3 = document.createElement('b');
                    b3.appendChild(document.createTextNode('Ignorieren: '));
                    td3.appendChild(b3);
                    td3.appendChild(document.createTextNode(response[6]));
                    tr.appendChild(td3);
                    
                    // Formular
                    var td4 = document.createElement('td');
                    var b4 = document.createElement('b');
                    b4.appendChild(document.createTextNode('Formular: '));
                    td4.appendChild(b4);
                    td4.appendChild(document.createTextNode(response[7]));
                    tr.appendChild(td4);
                    
                    // Löschen
                    var td5 = document.createElement('td');
                    var a = document.createElement('a');
                    a.setAttribute('onClick', 'deleteMV("'+response[2]+'")');
                    var img = document.createElement('img');
                    img.setAttribute('src', 'images/icons/delete.png');
                    img.setAttribute('alt', 'Löschen');
                    img.setAttribute('title', 'Löschen');
                    a.appendChild(img);
                    td5.appendChild(a);
                    tr.appendChild(td5);
                    
                    // Row an Tbody anhängen
                    body.appendChild(tr);
                } else {
                    // row updaten
                    
                    // Kunde
                    row.childNodes[1].childNodes[1].replaceData(0, row.childNodes[1].childNodes[1].nodeValue.length, ' '+response[4]);
                    
                    // Aktion
                    row.childNodes[3].childNodes[1].replaceData(0, row.childNodes[3].childNodes[1].nodeValue.length, ' '+response[5]);
                    
                    // Formular Ignorieren
                    row.childNodes[5].childNodes[1].replaceData(0, row.childNodes[5].childNodes[1].nodeValue.length, ' '+response[6]);
                    
                    // Formular
                    row.childNodes[7].childNodes[1].replaceData(0, row.childNodes[7].childNodes[1].nodeValue.length, ' '+response[7]);
                }

Damit man weiß, was "response" enthält noch mal das untere Beispiel.
PHP:
$json = json_encode(array(
					    0 => 'success',
					    1 => 'Austauschmeldevorgang wurde erfolgreich ausgelesen',
					    2 => $result['id'],
					    3 => $result['wz2008_id'],
					    4 => ($result['user'] == '') ? 'Alle Kunden' : $result['user'],
					    5 => ($split[0] == 'GA') ? 'Grundaustausch' : 'Hinzufügen',
					    6 => ($split[1] != '') ? substr($split[1], 1, -1) : '',
					    7 => $split[2]
					));

Würde mich sehr über Hilfe freuen.

MFG Nilson
 
Wenn man das Live sehen könnte, wäre es wahrscheinlich einfacher, die Fehlerquelle auszumachen...das Ganze nachzustellen wäre schon recht aufwendig :-(

Bekommst du denn Fehlermeldungen?

Was du jedenfalls mal machen könntest, wäre zu Prüfen, ob die jeweiligen Zeiger wirklich auf jene Knoten weisen, auf die sie Zeigen sollen(indem du dir bspw. einen alert mit dem TagNamen ausgeben lässt).
Mit "Zeiger" meine ich bspw. "body".
 
Hmm...mir fällt grade ein dass ich ja mit row===null prüfe ob diese Reihe schon existiert und upgedated werden muss oder neu hinzugefügt werden muss.

Problem ist, dass im Firefox nen "null" kommt wenn die Reihe noch nicht existiert, im IE jedoch ein "undefined" ....
Deswegen versucht der IE wohl jedes mal die Reihe upzudaten, da diese aber nicht da ist passiert nichts und es kommt kein Fehler....schätze ich mal..

MFG Nilson
 
Da könntest du mit try/catch arbeiten:
Code:
  try{
        row=document.getElementByIrgendwas();
     }catch(e){row=null;}

typeof ist da nicht hilfreich, falls du das probieren willst.
 
HMM, das klapp auch nicht, da wohl keine Exception geschmissen wird sondern row dann halt null oder undefined ist, wenn die Reihe nicht existiert...

MFG Nilson
 
row ist dann immer null (falls nicht existent)....auch im IE, ich dachte das hättest du als Fehlerquelle geortet?
 
Ja das ist wohl auch die Fehlerquelle denn mach ich nach der try/catch Anweisung nen alert(row) bekomme ich im IE immer noch undefined.....sprich ich bekomme keine Exception geworfen...

MFG Nilson
 
Dies rufe ich auf bevor ich die Prüfung des Wertes von row mache.
Code:
try {
                    var row = dojo.byId('MV_'+response[2]);
                } catch (e) {
                    row = null;
                }
                alert(row);

MFG Nilson
 
Ahso...das ist dann ein Fehler in dojo :eek:

Dort steht:
Code:
dojo.byId = function(id, doc){
//summary:
//Returns DOM node with matching `id` attribute or `null` 
//if not found
Die Rückgabe ist aber nicht null, wie man sieht, es steht auch nicht von null in der Funktion :)

Alldieweil schreibe anstatt
Code:
if (row === null)
...einfach...
Code:
if (!row)

Das trifft sowohl auf null, als auch auf "undefined" zu
 
Zurück