Ajax load via getElementById

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ajax load via getElementById

    Hallo zusammen. Ich habe angefangen mich mit Ajax zu beschäftigen. Dabei bin ich auf ein Problem gestoßen und erhoffe mir hier hilfte =)
    Um mich darin zurecht zu finden habe ich mir zur Aufgabe gemacht einen kleinen Chat zu schreiben.
    in der Datei sbox.php befindet sich zum einen das hier:

    Quellcode

    1. <script type="text/javascript" src="ajax.js"></script>
    2. <script>
    3. <!--
    4. function Update(status, statusText, responseText, responseXML){
    5. document.getElementById("chat").innerHTML = responseText;
    6. }
    7. var async = new Asynchronous();
    8. async.complete = Update;
    9. -->
    10. </script>

    und zu, anderen diesen Container

    Quellcode

    1. <div class=sbox id=chat>
    2. <?
    3. include ("msg.php");
    4. ?>
    5. </div>

    Die Datei msg.php stellt komplett eigenständig meine Informationen zusammen und stellt diese auch dar! Ich kann sie quasi als eigene Seite laden. Datenbankverbindung -> Abfrage -> Darstellung

    Via refresh button (vorläufig) in der sbox.php soll der container „chat“ aktualisiert werden!

    Quellcode

    1. <a href="javascript:async.call('msg.php','GET')">Ajax Reload</a><br />


    lade ich jetzt meine Datei sbox.php funktioniert der Chat via klick quasi (aktualisieren klappt! )
    zwar können Sonderzeichen über diesen reload nicht angezeigt werden, aber anderes Problem :P

    Jetzt möchte ich meine sbox.php in meiner eigentlichen seite einbettetn (um noch ein paar Infos aus der laufenden Session zu holen.)
    nach dem laden der msg.php über den Link (Ajax Reload) kommt es allerdings IN der Datei msg.php zu mysql Fehlern.

    Quellcode

    1. Warning: mysql_query() [function.mysql-query]: Access denied for user 'wwwrun'@'localhost' (using password: NO) in .../msg.php on line 11
    2. Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in .../msg.php on line 11
    3. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in .../msg.php on line 14


    Als ob ich mit dem laden über den Ajaxlink php lahmlegen würde...
    Ich hoffe das ganze klang jetzt nicht nur für mich verständlich und jemand hat eine Idee, wie es zu diesem Fehler kommt.

    Wenn ich soweit alle Probleme aus der Welt geschaffen habe, stelle ich gerne meine Daten zur Verfügung, das auch suchende ggf mit diesem Post etwas anfangen können =)

    Lieben Gruß und danke vorab!
  • Was man unter AJAX als Modewort versteht ist nur ein ganz normaler HTTP Aufruf der im Hintergrund stattfindet.
    Dein Problem hat nichts mit AJAX zu tun.

    Rufst du diese URL mal alleine auf ist das nämlich genau das selbe.
    Bring also erstmal den Part zum laufen.

    Scheint ja so als hättest du irgendwelche Includes vergessen, weshalb die Datei nicht alleine lauffähig ist.
  • Dein Problem ist, wenn ich das richtig verstanden habe, dass du denkst, dass die MySQL-Verbindung auf nach einem Ajax-Reload einer Seite immernoch vorhanden ist. Das ist aber falsch, du musst jede .php-Datei, die du nachlädst, als eigenständige Datei mit eigenständiger Verbindung und Loginüberprüfung etc. sehen.

    In diesem Fall müsstest du also mysql_connect() usw. nochmal in die msg.php schreiben.

    Ich bin mir nicht sicher, da ich ja deinen code nicht kenne, aber das sieht alles danach aus ;)
  • Hallo und danke für eure Antworten. Eure Vermutung ist ja gerade meion Problem =) denn in meiner msg.php öffne ich meine Datenbank.

    hier mal etwas abgespeckt!

    Quellcode

    1. <?
    2. $developer="...";
    3. $mysqlhost = "...";
    4. $mysqldb = "...";
    5. $mysqluser = "...";
    6. $mysqlpwd = "...";
    7. $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd);
    8. mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
    9. $boxqry = mysql_query("SELECT * FROM `ap_sbox` ORDER BY `timestamp` DESC LIMIT 30");
    10. while($msgres = mysql_fetch_array($boxqry))
    11. {
    12. ...
    13. }
    14. ?>
    Alles anzeigen


    Ein einfaches öffnen der Datei zeigt mir alle Daten auch an. egal wie oft ich diese neu lade. Wenn ich dann aber die Seite nur in meinem Container neu laden möchte, eben über meinen Link bekomme ich die besagte Fehlermeldung.

    Das erste Laden des Bereichs funktionier, da diese noch nicht über den Ajax link läuft. sondern per Include passiert...

    Quellcode

    1. <div class=sbox id=chat>
    2. <?
    3. include ("msg.php");
    4. ?>
    5. </div>

    könnte an dieser Stelle das Problem entstehen?

    Beste Grüße und vielen Danke
  • Mein Problem bestand in der Ordnersturktur =/

    Meine index.php liegt im root, meine Dateien sbox und msg lagen etwas weiter unten im Baum. Wenn ich jetzt in der sbox den refresh geschickt habe, greft er auf die Funktion in der index zurück und sucht die msg.php dann auch in dem Verzeichnis der index, und nicht in der von sbox (welche beim include abgefragt wird)

    Von demher muss ich den Hinweiß der zu ladenden Datei komplett angeben

    Quellcode

    1. <a href="javascript:async.call('/verz1/verz2/verz3/msg.php','GET')">Ajax Reload</a><br />


    beim refresh werden jetzt alle infos richtig geladen. Allerdings Umlaute und Sonderzeichen nicht korrekt dargestellt.