Homer: Ajax: Prototype Framework: Anfängerprobleme

Hallo,

ich habe heute angefangen, mich mit Ajax zu beschäftigen. Dazu habe ich (natürlich) den Wikipedia-Artikel dazu gelesen, und bin dem Link zum entsprechenden Wiki-book gefolgt.

Ich benutze das Prototype-Framework.

PHP programmiere ich schon seit ein paar Jahren oft und gerne, und habe auch schon einige kleinere wie größere Projekte hinter mir.

Im Moment programmiere ich eine Auflistung aller MySQL-Tabellen. Bei Klick auf die Tabelle soll sich eine Auflistung der Felder der entsprechenden Tabelle anhängen (JavaScript appendChild).

Mit Hilfe der Dokumentation von Prototype habe ich mir Folgendes zusammengebastelt:

  
  function expand(i, name)  
  {  
   var ulname="ul"+i;  
   var ul=document.getElementById(ulname);  
  
   if(ul.style.display=="none")  
   {  
        ul.style.display="block";  
  
        var myAjax = new Ajax.Updater(ulname, "ajax_felder.php",  
                 {  
                  method: get,  
                  parameter: {tblname: name},  
                  onFailure:fehler,  
                  onComplete:erfolg  
                 }  
        );  
   }  
   else  
   {  
     ul.style.display="none";  
   }  
  
  }  

Im HTML sieht das das so aus:

  
<div class="tables" id="table0">  
 <a href="javascript:expand(0,'tabelle_a');"><img src="img/b_sbrowse.png" alt=""></a>  
 <a href="tbl_browse.php?t=tabelle_a" target="right">tabelle_a</a>  
 <ul id="ul0" style="display:none"></ul>  
</div>  
  
<div class="tables" id="table0">  
 <a href="javascript:expand(0,'tabelle_b');"><img src="img/b_sbrowse.png" alt=""></a>  
 <a href="tbl_browse.php?t=tabelle_b" target="right">tabelle_b</a>  
 <ul id="ul1" style="display:none"></ul>  
</div>  

Die ul sind vorerst alle per CSS auf display:none gestellt, und werden erst beim Klick auf den Link, der die JavaScript-Funktion "expand" aufruft, eingeblendet. Ist das ul schon eingeblendet, wird es wieder ausgeblendet. Es entsteht also eine klassische Menü-Struktur.

Folgendes Problem stellt sich mir nun:
1. Die Funktionen fehler und erfolg werden scheinbar nicht aufgerufen. Diese existieren (ich habe sie hier nur nicht genannt), und geben nur "erfolg!" oder "kein erfolg!" als alert aus. Jedenfalls wird keine der Funktionen aufgerufen.
2. Was muss im PHP-Skript stehen - echo oder return? - damit der entsprechende Output in die ul eingetragen wird?

Lg
Homer

  1. Hi,

    Im HTML sieht das das so aus:

    <ul id="ul0" style="display:none"></ul>

    Leere UL sind nicht valide.

    Folgendes Problem stellt sich mir nun:

    1. Die Funktionen fehler und erfolg werden scheinbar nicht aufgerufen. Diese existieren (ich habe sie hier nur nicht genannt), und geben nur "erfolg!" oder "kein erfolg!" als alert aus. Jedenfalls wird keine der Funktionen aufgerufen.

    Vielleicht, weil dein Script schon vorher wegen eines Fehlers abbricht? (Was sagt denn die Konsole/FireBug dazu?)
    Zum Beispiel, dass du in der Erzeugung des Request-Objektes auf ein nicht definiertes Objekt namens get zugreifst, koennte zu einem Abbruch fuehren.

    1. Was muss im PHP-Skript stehen - echo oder return? - damit der entsprechende Output in die ul eingetragen wird?

    Na was nutzt du denn normalerweise, wenn du per PHP-Script Ausgaben an den Client senden willst?

    Evtl. musst du das ganze noch um einen passenden Content-Type-Header ergaenzen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“