Ajax: Firefox Ok, Opera falsch und IE garnicht...

nosilume

Erfahrenes Mitglied
Hallo !
Ich habe ein kleines Problem mit einer von mir geschriebenen Ajax Anwendung: Im Firefox funktioniert alles super, ist ja klar ist ja auch mein Hauptbrowser...
In Opera ist alles aber total verzerrt und der IE hat anscheinend überhaupt ein Problem mit meinem Script. Hier sind mal ein paar Screenshots:
Wie es sein sollte und wie es in Opera ausschaut. Vom IE hab ich leider keinen Screen, aber dort werden keine Nachrichten angezeigt, es steht einfach nur Sender/Betreff/Zeit. Das Script sieht so aus:
Code:
onLoad: loadPmHeaders();

var messages;

function loadPmHeaders() {
    var MyAjax = new Ajax.Request(
        GLOBAL_url + 'pm/inboxAjax/',
        {
            method: 'get',
            onSuccess: function (request, json) {
                messages = json;
                var table = $('pms');
                var html = table.innerHTML;
                json.each(function (f) {
                    html = html + '<tr>';
                    if (f.read == 0) {
                        html = html + '<img class="icon" src="/www/img/icons/email.png" alt="Ungeöffnete Nachricht" title="Ungeöffnete Nachricht" />'
                    } else {
                        html = html + '<img class="icon" src="/www/img/icons/email_open.png" alt="Geöffnete Nachricht" title="Geöffnete Nachricht" />'
                    }
                    html = html + "<td>" + f.senderName  + '</td><td><a href="#" onclick="loadMessage(' + f.messageId + ')">' + f.title + "</a></td><td>" + f.sended + "</td>";
                    html = html + '<tr>';
                })
                table.innerHTML = html;
            },
            onFailure: function (request, json) {
                alert ('Error fetching headers');
            }
        }
    );
}

function loadMessage(id) {
    var MyAjax = new Ajax.Request(
        GLOBAL_url + 'pm/getMessage/id/' + id + 'setRead/true',
        {
            method: 'get',
            onSuccess: function (request, json) {
                var div = $('pmContent');
                div.innerHTML = json.message;
            },
            onFailure: function (request, json) {
                alert ('Error fetching single message');
            }
        }
    );
}
Als Backend verwende ich PHP und es läuft einwandfrei.
Vielen Dank für eure Hilfe !
 
Zuletzt bearbeitet:
Code:
                    html = html + "<td>" + f.senderName  + '</td><td><a href="#" onclick="loadMessage(' + f.messageId + ')">' + f.title + "</a></td><td>" + f.sended + "</td>";
                    html = html + '<tr>';

Solltest du hier nicht Besser das <tr> schließen statt ein neues aufzumachen?
Ich denke mal das es an nicht korrekten Tabellen liegt die dann jeder Browser ein wenig anderst interpretiert.
 
Hi,

ausserdem wirst du beim IE auf Widerstand stossen, wenn du versuchst, die Tabellenstruktur über innerHTML
aufzubauen. Versuche es stattdessen die Tabelle mit Hilfe des DOM zu erweitern.

Beispiel:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
function updateTable(){
  var table = document.getElementById("tableID");

  // Neue Zeile erstellen
  var objRow = table.getElementsByTagName("tbody")[0].insertRow(table.rows.length);

  // Neue Zelle erstellen
  var objTD = document.createElement("td");
  // Zelleninhalt einfügen
  objTD.innerHTML = "f.senderName";
  // Zelle in Zeile einhängen
  objRow.appendChild(objTD);

  objTD = document.createElement("td");
  objTD.innerHTML = "<a href=\"#\" onclick=\"alert('onclick'); return false;\">f.title</a>";
  objRow.appendChild(objTD);

  objTD = document.createElement("td");
  objTD.innerHTML = "f.sended";
  objRow.appendChild(objTD);
}
</script>
</head>
<body>
<button onclick="updateTable()">updateTable</button>
<table id="tableID">
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
  </tr>
</table>
</body>
</html>
Weiterhin hängen in deinem Konstrukt die Bilder förmlich in der Luft - d.h. sie befinden sich in der Zeile,
nicht in einer Zelle. Wahrscheinlich ist das ebenfalls ein Grund für die Fehldarstellung im Opera.

Ciao
Quaese
 
Danke, das passiert wenn man sich nicht ausgiebig damit beschäftigt. Ich werde das nächste mal nocheinmal drüber schaun bevor ich hier poste.
Ich war nur leicht irritiert weil Firefox die Fehler anscheinend von selbst korrigiert hat.
 
Danke, das passiert wenn man sich nicht ausgiebig damit beschäftigt. Ich werde das nächste mal nocheinmal drüber schaun bevor ich hier poste.
Ich war nur leicht irritiert weil Firefox die Fehler anscheinend von selbst korrigiert hat.
*Spam* ja daran solltest du dich gewöhnen, FF und IE machen meistens etwas anderes ;) wo aber FF (meiner Erfahrung nach) meistens eher das darstellt was ich
haben will ;)
 
Zurück