• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Script

Status
Für weitere Antworten geschlossen.

ixam

Neues Mitglied
Hallo,
Ich habe folgenden script erstellt:

PHP:
    <script type="text/javascript">
     function erzxml(){
      var resobject = null;
      try {
       resobject = new XMLHttpRequest();
      }catch(Error){
       alert("Sorry, but your browser does not support the Ajax technology");
      }
      return resobject;
     }
    
    function pse(){
      resobject = erzxml();
      resobject.open('get', 'newelement.php', true);
      resobject.onreadystatechange = handleresponse;
      resobject.send(null);
    }
    
    function handleresponse(){
     if(resobject.readyState == 4){
      document.getElementById('labor').innerHTML=resobject.responseText;
     }
    }
    </script>
Wenn ich nun die funktion pse aufrufe, dann passiert nichts. Erst nach etlichen Aufrufen erscheint für einen Moment der Inhalt von newelement.php und verschwindet sofort wieder. Der Code von newelement.php lautet:
PHP:
<?php
echo"Es hat geklappt!!!";
?>
Wie kann ich nun dieses Problem beheben??? Ich möchte, dass der Inhalt nach dem ersten Aufruf erscheint und auch da bleibt.
Danke schonmal für eure Hilfe

Grüße
ixam
 
Werbung:
resobject muss bei dir global sein, woher sollte sonst handleresponse diese Variable kennen? Am besten du reichst das Objekt nur weiter.
 
Du solltest Dir auch angewöhnen, in die Fehlerkonsole zu gucken, damit Du weißt, was falsch läuft. Ohne diese Infos ist es eine Qual, Fehler zu suchen.
 
Werbung:
Danke für eure Hilfe.
Ich habe es jetzt so versucht:
PHP:
    <script type="text/javascript">
     function erzxml(){
      var resobject = null;
      try {
       resobject = new XMLHttpRequest();
      }catch(Error){
       alert("Sorry, but your browser does not support the Ajax technology");
      }
      return resobject;
     }
    
    function pse(){
      resobject = erzxml();
      resobject.open('get', 'newelement.php', true);
      resobject.onreadystatechange = handleresponse(resobject);
      resobject.send(null);
    }
    
    function handleresponse(resobject){
     if(resobject.readyState == 4){
      document.getElementById('labor').innerHTML=resobject.responseText;
     }
    }
    </script>
Jetzt passiert aber überhaupt nichts mehr. Und die Fehlerkonsoloe von meinem FF bleibt, wie vorher auch, leer.

Habe ich euch falsch verstanden, oder liegt der fehler an was anderem.
Grüße
ixam
 
Code:
resobject.onreadystatechange = handleresponse(resobject);

Übergibt onreadstatchange null, statt einer Funktions-Referenz. Du willst Closures lernen:
Code:
[...]
resobject.onreadystatechange = (function (resobject) {
    return handleresponse;
})(resobject);
[...]
function handleresponse(){
     if(resobject.readyState == 4){
      document.getElementById('labor').innerHTML=resobject.responseText;
     }
}
 
Danke, aber es passiert immer noch nichts, obwohl Livehttp headers eine Kommuniktion anzeigt. Die Fehlerkonsole ist natürlich leer. :roll:

Grüße
ixam
 
Werbung:
Werbung:
ok:

PHP:
    <script type="text/javascript">
     function erzxml(){
      var resobject = null;
      try {
       resobject = new XMLHttpRequest();
      }catch(Error){
       alert("Sorry, but your browser does not support the Ajax technology");
      }
      return resobject;
     }
    
    function pse(){
      resobject = erzxml();
      resobject.open('get', 'newelement.php', true);
      resobject.onreadystatechange = (function (resobject) {return handleresponse;})(resobject);
      resobject.send(null);
    }
    function handleresponse(){
     if(resobject.readyState == 4){
      document.getElementById('labor').innerHTML=resobject.responseText;
     }
    }
    </script>

Grüße
ixam
 
PHP:
    <html><head><title></title><script type="text/javascript">
     function erzxml(){
      var resobject = null;
      try {
       resobject = new XMLHttpRequest();
      }catch(Error){
       alert("Sorry, but your browser does not support the Ajax technology");
      }
      return resobject;
     }
    resobject = erzxml();
    function pse(){
      if (resobject.readyState == 4 || resobject.readyState == 0) {
        resobject.open('get', 'newelement.php', true);
        resobject.onreadystatechange = handleresponse;
        resobject.send(null);
      }
    }
    
    function handleresponse(){
     if(resobject.readyState == 4){
      document.getElementById('labor').innerHTML=resobject.responseText;
     }
    }
    </script>
    </head>
    <body onload="pse()" id="labor"></body>
    </html>
 
Werbung:
Langsam wird es merkwürdig:
Der Code, wie er von Asterixus gepostet wurde, funktioniert. Wenn ich nun aber die funktion nun nicht onload auf rufe, sondern mit onclick, dann funktioniert es wieder nur so, wie am Anfang beschrieben.
Hier mal die Eindindung des Eventhandlers:
PHP:
      <td id="psoe" onmouseover="document.getElementById('psoe').style.backgroundColor='#a7d0ff'" onmouseout="document.getElementById('psoe').style.backgroundColor=''"><a href="" onclick="pse()" ><img src="img/pse.jpg" alt="psoe" border="0" />  New element</a></td>
Grüße
ixam
 
Werbung:
Das Standard-Verhalten muss im Event gecancelt werden. Über's DOM-Event-Interface mit preventDefault() oder bei Inline-HTML-Events mit return false. Das Standard-Verhalten wäre hier, dass die Adresse aus href geladen wird und danach keine Events mehr gefeuert werden, weil die Seite schon im Ungeladen-Status ist.

Einfach gesagt: return false verhindert, dass der Link geladen wird.

P.S. Du solltest <a> nur benutzen, wenn du ein richtiges Ziel als Adresse angibst und das Element nicht als Klick-Link missbrauchst.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben