LazerViking: mittels AJAX ( XMLHttpRequest ) popups erzeugen?!

hallo liebe leute!
folgendes problem tut sich derzeit bei mir auf und ich weiss nich wie ich es formulieren soll!

also erstens:

ich habe eine PHP datei die eine WHILE schleife hat und diese soll (falls etwas aus der datenbank ausgelesen wird) dann popups erzeugen
der code sieht wie folgend aus:

<?php
// Einstellungen laden
include("../config.php");
$receiver = $_SESSION['user_id'];
// Datensätze ermitteln
$dbresult = mysql_query("SELECT convo_id, sender_id, receiver_id, message, DATE_FORMAT(message_time, '%T') as msgtime, readstatus_receiver FROM dimmconvos ORDER BY msgtime");
if (!$dbresult) {
   die('Ungueltige SQL-Query.');
}

// Datensätze auslesen, Fensterfunktion setzen und anschließend Funktion aufrufen

while ($row = mysql_fetch_array($dbresult)) {

echo "  <script type='text/javascript'>

function win".$row['message']."()
   {
    var win = new Window({id: '".$row['message']."', className: 'alphacube', title: 'Chat mit ', width:300, height:160});
     win.getContent().innerHTML = 'tesssttt';

win.setDestroyOnClose();
     win.showCenter();
    win.setConstraint(true, {left:0, right:0, top: 30, bottom:10})
     win.toFront();
   }

</script>

<script type='text/javascript'> win".$row['message']."(); </script>";

?>

alles was nun in ECHO ausgeben wird soll von einer anderen datei welche mit einem XMLHttpRequest AJAX code ausgestattet ist ausgelesen und im dokument wieder gegeben werden.
der ajax-code sieht wie folgend aus und ist in die darauf folgende html datei eingebunden

// globale Instanz von XMLHttpRequest
var xmlHttp = false;

// XMLHttpRequest-Instanz erstellen
// ... für Internet Explorer
try {
    xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
    try {
        xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
        xmlHttp  = false;
    }
}
// ... für Mozilla, Opera und Safari
if (!xmlHttp  && typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
}

// aktuelle Daten laden
loadData();

// alle 5 Sekunden neue Daten holen
setInterval("loadData()",5000);

function loadData()
{
 if (xmlHttp) {
     xmlHttp.open('GET', 'checker.php', true);
     xmlHttp.onreadystatechange = function () {
         if (xmlHttp.readyState == 4) {
             document.getElementById("checker_content").innerHTML = xmlHttp.responseText;
         }
     };
     xmlHttp.send(null);
 }
}

er befindet sich in der datei "checker.js"
heißt: wenn die php schleife einen code für die erzeugung eines neuen popups ausgibt wird dieser von der XMLHttpRequest gelesen und im dokument welches gleich folgt ausgegeben und SOLLTE eigentlich ein neues popup erzeugen (doctype und header etc. hab ich hier jetzt mal entfernt)

<script type="text/javascript" src="checker.js"></script>

<div id="checker_content">

....

</div>

alles soll dazu dienen dass ich kein meta-refresh oder der gleichen benutzen muss und die bereits geöffneten popups nicht wieder geschlossen werden sondern einfach ohne probleme "immer wieder neue dazu kommen können"

die funktion / id hat zum test die werte der $row['message'] variable die durch die MySql query gefüllt wird

doch wenn ich das alles so mache wird einfach kein popup erzeugt

wenn ich alles in einer datei habe und OHNE ajax arbeite funktioniert die schleife und die ausgabe der popups ohne probleme

hoffe ich konnte mein problem verständlich erläutern und ihr könnt mir evtl helfen :-/

  1. Lieber LazerViking (was auch immer der Nick soll),

    warum brauchst Du Popups? Sind Deine Popups nicht der misslungene Versuch, eine Seite sinnvoll zu strukturieren, wenn das, was Du eigentlich vorhast, auch ohne all diesen Quatsch ginge?

    Wozu muss ein Popup mittels AJAX Daten nachladen? Kann man denn in dieses Popup kein reguläres Dokument mit einem wie auch immer gearteten URI laden lassen? Wozu der Quatsch mit AJAX?

    Mach Dir mal Gedanken darüber, wie Du Deine Seite sinnvoll (sprich: total uncool weil auf herkömmliche und total langweilige <a href="seite.html">-Weise) aufbauen kannst, sodass sie auch schön barrierearm zugänglich ist.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber LazerViking (was auch immer der Nick soll),

      warum brauchst Du Popups? Sind Deine Popups nicht der misslungene Versuch, eine Seite sinnvoll zu strukturieren, wenn das, was Du eigentlich vorhast, auch ohne all diesen Quatsch ginge?

      Wozu muss ein Popup mittels AJAX Daten nachladen? Kann man denn in dieses Popup kein reguläres Dokument mit einem wie auch immer gearteten URI laden lassen? Wozu der Quatsch mit AJAX?

      Mach Dir mal Gedanken darüber, wie Du Deine Seite sinnvoll (sprich: total uncool weil auf herkömmliche und total langweilige <a href="seite.html">-Weise) aufbauen kannst, sodass sie auch schön barrierearm zugänglich ist.

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      lieber Felix Riesterer,

      wie es aussieht bist du allwissend dass du ohne weiteres sagen kannst dass das was ich vorhabe auch ohne diesen "quatsch" funktioniert.

      und wenn du dir meine 3 geposteten codes richtig angeschaut hättest, hättest du evtl auch logisch kombinieren können dass es nicht um die problematik geht ein dokument in einem popup aufzurufen, sondern die popups ansich zu erzeugen und dies auch nicht mittels eines links!

      hättest du mein anliegen durchschaut dann hätte ich mich sehr gerne eines besseren belehren lassen... wie es denn wohl ohne diesen quatsch geht!

      was für einen zweck ich damit verfolge, mit meinen ach so unstrukturierten methoden, ist im endeffekt egal da ich nur eine konstruktive antwort in bezug auf die lösung meines problems erwartet habe und keine kritik von jemandem der scheinbar nichteinmal meine gestellte frage verstanden hat.

      aber um evtl zu verhindern weitere destruktive, vom thema abschweifende, nachrichten zu erhalten sage ich dass die popups als eine art CHATFENSTER verwendet werden sollen.

      falls die hintergründe der hier verwendeten nicknames (welche im internet üblicherweise oft benutzt werden) dein einziges problem sind möchte ich dir sagen dass es sich um einen songtitel einer band handelt ;)
      ich hoffe du kannst nun ruhig schlafen!

      ich werde nun weiter auf konstruktive antworten von benutzern warten die evtl meine problematik durchschaut haben und nicht nur rumnörgeln möchten.

      ist ja schon schlimm genug dass ich mich überhaupt rechtfertige

      schönen abend wünsche ich dir aber trotzdem

      1. Lieber LazerViking,

        dass die popups als eine art CHATFENSTER verwendet werden sollen.

        tja, wenn die aber nicht mittels eines Klicks des Besuchers geöffnet werden sollen (also entweder als href="javscript:window.open()" oder onclick="window.open()"), dann werden sehr viele Popup-Blocker genau dieses verhindern! Mit Recht!

        Wenn Du schon unbedingt kleine Extrafenster (und gleich mehr als eines) benötigst, anstatt deren Inhalte auf der Seite an sich unterzubringen, dann wäre es meines Erachtens etwas sicherer (von wegen Block-Mechanismen), iframes in "layers" zu packen und als Pseudofenster in Deinem Dokument einzusetzen. Je nach Fall kann aber auch die Benutzung von iframes bei einer sinnvollen Seitenstruktur vermieden werden, wenn es sich um "so eine Art Chat" handeln soll. Ob die "Popups" nun in eigenen Fenstern - egal ob neues Browserfenster/-Tab (denke auch an "tabbed browsing"!) - oder in irgendwelchen Fenster-Nachbildungen auf der Seite selbst angezeigt werden, es ist sicherlich ebenso möglich diesen "Fensterinhalten" einen Platz im Dokument Deiner Seite zu geben, ohne auf ein Popup auszuweichen.

        Chatfenster? Da sehe ich durchaus einen sinnvollen Anwendungsfall für AJAX, oder eben eines (für Chatanwendungen meist üblichen) Java-Applets, das auch wunderbar in einem Teilbereich einer Seite laufen kann.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Lieber LazerViking,

          dass die popups als eine art CHATFENSTER verwendet werden sollen.

          tja, wenn die aber nicht mittels eines Klicks des Besuchers geöffnet werden sollen (also entweder als href="javscript:window.open()" oder onclick="window.open()"), dann werden sehr viele Popup-Blocker genau dieses verhindern! Mit Recht!

          Wenn Du schon unbedingt kleine Extrafenster (und gleich mehr als eines) benötigst, anstatt deren Inhalte auf der Seite an sich unterzubringen, dann wäre es meines Erachtens etwas sicherer (von wegen Block-Mechanismen), iframes in "layers" zu packen und als Pseudofenster in Deinem Dokument einzusetzen. Je nach Fall kann aber auch die Benutzung von iframes bei einer sinnvollen Seitenstruktur vermieden werden, wenn es sich um "so eine Art Chat" handeln soll. Ob die "Popups" nun in eigenen Fenstern - egal ob neues Browserfenster/-Tab (denke auch an "tabbed browsing"!) - oder in irgendwelchen Fenster-Nachbildungen auf der Seite selbst angezeigt werden, es ist sicherlich ebenso möglich diesen "Fensterinhalten" einen Platz im Dokument Deiner Seite zu geben, ohne auf ein Popup auszuweichen.

          Chatfenster? Da sehe ich durchaus einen sinnvollen Anwendungsfall für AJAX, oder eben eines (für Chatanwendungen meist üblichen) Java-Applets, das auch wunderbar in einem Teilbereich einer Seite laufen kann.

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.

          ich befürchte wir reden immernoch ein wenig aneinander vorbei.
          ich will es so lösen und es ist auch sinnvoll es für meine zwecke so zu lösen.

          um es zu verdeutlichen wieso:

          es soll eine art instant-messenger unterdem die benutzer die miteinander befreundet sind miteinander chatten können werden!
          und die PHP datei erzeugt im falle dass eine nachricht den status "unread" (noch nicht in der query angepasst aber is auch nebensächlich solang das noch nich funktioniert) hat ein popup (so wie es z.b. bei icq auch ist wenn man eine neue nachricht bekommt)

          hoffe du verstehst nun wie ich das meine

          und die lösung mit ajax schien mir dafür am besten weil ich den code auf jeder seite einbinde so das egal wo sich der user gerade aufhält ein popup erzeugt werden kann im falle dass er eine neue nachricht erhält

          trotzdem danke dass du deine zeit opferst um auf meine posts zu antworten :)

          grüße lazerviking

          1. ich befürchte wir reden immernoch ein wenig aneinander vorbei.
            ich will es so lösen und es ist auch sinnvoll es für meine zwecke so zu lösen.

            um es zu verdeutlichen wieso:

            es soll eine art instant-messenger unterdem die benutzer die miteinander befreundet sind miteinander chatten können werden!
            und die PHP datei erzeugt im falle dass eine nachricht den status "unread" (noch nicht in der query angepasst aber is auch nebensächlich solang das noch nich funktioniert) hat ein popup (so wie es z.b. bei icq auch ist wenn man eine neue nachricht bekommt)

            hoffe du verstehst nun wie ich das meine

            und die lösung mit ajax schien mir dafür am besten weil ich den code auf jeder seite einbinde so das egal wo sich der user gerade aufhält ein popup erzeugt werden kann im falle dass er eine neue nachricht erhält

            trotzdem danke dass du deine zeit opferst um auf meine posts zu antworten :)

            grüße lazerviking

            sorry wegen doppelpost aber muss noch ergänzen dass es sogar pseudofenster sind wie du sagst...
            kannst ja mal unter http://prototype-window.xilinus.com/ schauen
            diese popups benutze ich
            die funktinieren auch...nur eben nicht wenn ich sie über diesen ajax script wiedergeben will :-/

  2. Hallo,

    Du holst HTML-Code vom Server und schreibst ihn ins gegenwärtige Dokument. Der HTML-Code beinhaltet ein script-Element mit JavaScript-Code. Richtig verstanden?

    Wird der JavaScript-Code denn überhaupt ausgeführt infolge der innerHTML-Zuweisung? Was macht ein einfaches alert()?

    (Wieso lässt du dein Script nicht einfach direkt JavaScript-Code ausgeben und führst responseText mit eval() aus? Oder bindest das Script mit einem dynamisch eingefügten script-Element ins Dokument ein?)

    Mathias