[AJAX] JS im "return" von XML http request?!

Goltergaul

Well-known member
ID: 17553
L
26 April 2006
480
7
Hi ich habe hier folgendes gebastelt:
Code:
//////////////////////////////////////
/// XML Request function
//////////////////////////////////////
function loadurl(url) {
      try {
            xmlhttp = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP"); 

      }
      catch (e) {
            alert('Ihr Browser unterstützt diese Funktion leider nicht.');
      }

      xmlhttp.onreadystatechange = triggered;
      xmlhttp.open("GET", url);
      xmlhttp.send(null);
}

//////////////////////////////////////
/// XML Request handler
//////////////////////////////////////
function triggered() {
      // 0=Uninitialised 1=Loading 2=Loaded 3=Interactive  
      if ((xmlhttp.readyState == 1)) {
            document.getElementById("content").innerHTML = "Loading <img src=\"images/ajax-loader.gif\" />";
      }
      if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
            document.getElementById("content").innerHTML = xmlhttp.responseText;
      }
}


//////////////////////////////////////
/// Startfunktion
//////////////////////////////////////
window.onload = function start_game() {
      loadurl("https://localhost/tiberianwars2/ingame_bauhof.php");
}

in der Datei ingame_bauhof.php wird ein Javascript ausgegeben.
Erste Frage: Wird dieses Javascript ausführbar sein?
Zweite Frage: Dieses Javascript beinhaltet eine window.onload Event. Das funktioniert dann natürlich nicht da das Fenster ja schon geladen hat und dieses Javascript nachträglich reingeladen wurde. Wie kann ich das jetzt hinbekommen, dass das JS ausgeführt wird, sobald es eingeladen wurde?
 
1. Frage: ja ist es, dafür gibt es die JavaScript-Funktion eval()
2. Frage: onLoad wird bei Ajax-Verbindungen incht ausgeführt, da die Seite ja nicht "geladen wurde". Starte doch den Teil in der onLoad-Funktion manuell (s.o.)


allerdings solltest du wenn du nicht nur HTML überträgst kein responseText sondern responseXML nutzen um HTMl-Code von sonstigem trennen zu können (z.b. Java-Script, Variablen etc)
 
ok werde das mal testen... habe aber auch noch folgenden Trick gefunden:
It is possible to launch automatically javascript embedded into the page. This solution works only with Firefox and Opera. And I think that will suprise some people ;)
HTML:
function appendAndLaunchJs() {
    if(!isRequest()) return;
   
    var inner = document.getElementById('innerHTML');

    var node = document.createElement('div'); // create a new div element
    node.innerHTML = xmlRequest.responseText; // append the text to node
    inner.innerHTML = '';                     // clear the destination node
    inner.appendChild(node);                  // append the node as a child and ...
                                              // ... at this point the JS is executed
}

Habe den jetzt mal benutzt, da mein Game im IE sowiso nicht funktioniert.
 
:LOL:
einfach mal leider 70% der User komplett ausschließen :biggrin:
so schwer ist das mit dem trennen von Conten und Js ja net wirklich
 
laut einer Umfrage sind 85% meiner Spieler mit Firefox oder Opera unterwegs. Da mein Spiel schön grafisch ist und der IE aber kein PNG kann kann ich das aber sowiso vergessen ;)
 
laut einer Umfrage sind 85% meiner Spieler mit Firefox oder Opera unterwegs. Da mein Spiel schön grafisch ist und der IE aber kein PNG kann kann ich das aber sowiso vergessen ;)

ie6 kann auch mit pngs umgehen... zwar umständlich, aber es geht. für leute die zufaul sind auf die eigenheiten vom ie6 einzugehen kann ich nur immer wieder https://dean.edwards.name/IE7/ empfehlen.
 
Da mein Spiel schön grafisch ist und der IE aber kein PNG kann kann ich das aber sowiso vergessen ;)
Es gibt den Trick mit den Filtern.
Zwar böse, aber es geht. Zumindest ab IE5.5.

Ich hab das auf meiner Seite benutzt. Wer mal testen will, siehe Signatur.
Is aber ne Drecksarbeit: Ich hab via Useragent den IE erkannt und alle transparenten PNGs durch Filter ersetzt.

edit:
Und komm mir jetzt bitte keiner, dass man den Useragent fälschen kann :roll:
 
Ja den Trick kenne ich. Aber da war irgendwas dass es in divs oder als hintergrund von irgendewas nicht funktionierte... Irgendsowas, ich weiß nicht mehr genau. Und dann hab ichs aufgegeben...
 
ie6 kann auch mit pngs umgehen... zwar umständlich, aber es geht. für leute die zufaul sind auf die eigenheiten vom ie6 einzugehen kann ich nur immer wieder https://dean.edwards.name/IE7/ empfehlen.

man kann aber nicht erwarten, dass User sich das installieren. Der Großteil der User ist eben mit dem IE6 unterwegs (auch wenn diese es nicht zugeben) und da muss man eben rücksicht nehmen. Es werden noch die Zeiten kommen, in denen der IE standardkonform wird (ie7) solange heisst es eben noch dirty-coding für ie-kompatibilität
 
Richtig so, wenn man ein Autorennen fahren will braucht man auch den richtigen Wagen ;)

Zitat: "Die dummen User die IE haben sind eh nicht unsere Zielgruppe. Wir verkaufen zwar nichts, aber der Browser macht bei uns den Unterschied ..." (oder so ungefähr) - lass ich mal so stehen, kann ja jeder nach seinem Geschmack anpassen :D

Bist du sicher, daß die Umfrage nicht "falsch" ist, indem vielleicht User mit FF/Opera in einem höherem Verhältnis geantwortet haben als sie im Netz vertreten sind?

Es ist nicht gaaaanz so schwierig, Multi-IE-Versions-konform ("nettes" Wort *g*) zu coden, dann macht man z.B. im erwähnten Fall einfach transparente GIFs für den IE, die IE-User müssen dann eben auf die Alphatransparenz verzichten. Schließlich hab ich auch mal Browsergames gespielt und ich war manchmal froh, bei 'nem Freund oder im I-Cafe kurz reingehen zu können, wo es nur den IE gab (auch wenn ich den sonst ja nicht benutze). Du siehst, es gibt auch andere Gründe diesen dennoch zu unterstützen, auch wenn man ihn abgrundtief hasst.
 
man kann aber nicht erwarten, dass User sich das installieren. Der Großteil der User ist eben mit dem IE6 unterwegs (auch wenn diese es nicht zugeben) und da muss man eben rücksicht nehmen. Es werden noch die Zeiten kommen, in denen der IE standardkonform wird (ie7) solange heisst es eben noch dirty-coding für ie-kompatibilität

hast du dir das mal angeschaut... https://dean.edwards.name/IE7/ hat nix mit IE7 zu tun. das ist ein javascript was einige fehler im ie ausgleicht. unter anderem auch das png problem... und einige css sachen.
 
@SpecialsGuy: Ich bin kein IE-Hasser, bin sogar auch stark dafür alles IE konform zu gestalten, aber ich habe es leider nicht hinbekommen :(

@ZeroCCC: Ich schaue mir das mal an, aber ich fürchte dass ich das bereits probiert hatte.

edit:das png scheint zu gehen. Aber meine Scripts nicht. (war ja klar^^) Wo krieg ich für den IE nen scriptdebugger her?
 
Zuletzt bearbeitet:
Der IE hat einen Scriptdebugger schon integriert. Einfach unter Extras->Internetoptionen->Erweitert einschalten, da steht irgendwo "Scriptfehler anzeigen" oder so ähnlich. Und es erscheint links unten in der Statusleiste ein Warnsymbol, über dem du die JS-Fehlermeldungen erhälst.
 
Jep den kenne ich und hab ihn aktiviert. Nur zeigt der mir keinen Fehler an. Trotzdem geht mein Script nicht. Komisch was?^^
wenn der IE dir keinen Fehler anzeigt, dann gibt es auch keinen.
Der Fehler sitzt 50cm vor dem Bildschirm :biggrin:
du hast einen Denkfehler drinnen und keinen Script-Fehler, von daher wird der IE auch nicht meckern, auch Opera und FF werden nicht meckern
 
in Opera und FF gehts aber :p
Sorry aber das hätte ich jetzt schon überrissen ;)

Es liegt vll - so meine Vermutung - an funktionen die der IE anders interpretiert, aber kein Script-Fehler daraus resultiert. Leider weiß ich nicht woran es liegt, deswegen interessiere ich mich für einen alternativen IE Scriptdebugger, der mir merh Infos liefern kann.
 
ein alternativer Debugger wird dir da auch ent weiterhelfen, denn wenn der IE das net kann, wie soll nen alternatives 3rd-Party-Tool das dann erkennen?
das Zauberwort heisst try&error (alert('bis hierhin kommt der parser')) :biggrin: