tomm: AJAX Problem

hi all,

ich habe folgenden Democode, der leider nicht funzt:

suche1.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> XMLHttpRequest Demo</title>
  <script type="text/javascript" language="javascript">

// Objektinstanz
    var xhttp;
    var oldValue;

// -------------------------------------------------------------------------------

function init() {

if (window.ActiveXObject) {
        try {
           // Internet Explorer 6.x
          xhttp  = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
           //  Extrawurst für IE 5.x
          try {
            xhttp  = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
            xhttp = false;
          }
        }
      } else if (window.XMLHttpRequest) {
        // Für Mozilla, Opera und Safari
        try {
           xhttp = new XMLHttpRequest();
        } catch (e) {
           xhttp = false;
        }
     }
   }

// -------------------------------------------------------------------------------

function updateList() {

if (!xhttp) { return; }
      var q=document.getElementById('q').value;

// Unnötige Requests vermeiden
      if (q==oldValue) { return; }

// Wert merken
      oldValue=q;

// onLoad Handler setzen
      xhttp.onload=updateList_callback;

// asynchronen GET Request vorbereiten
      q=encodeURIComponent(q);
      xhttp.open('GET', 'http://gandalf/tests/ajax/suggest.php?q='+q, false);

// Request absetzen
      xhttp.send('');

}

// -------------------------------------------------------------------------------

function updateList_callback() {

if (xhttp.responseText) {
       // Ziel element
       target=document.getElementById('avail');

// Vorschlagsliste
       var list=xhttp.responseXML.getElementsByTagName('suggest');
       if (list[0]) {
         // Liste importieren und einbinden
         var tmp=document.importNode(list[0].firstChild,true);
         target.replaceChild(tmp,target.firstChild);
       } else {
         // Vorschläge löschen
         target.innerHTML='&nbsp;';
       }
     } else {
       // Irgendwas ging nicht gut...
       alert(xhttp.responseText);
     }

}

</script>
 </head>
 <body onload="init();">

<fieldset style="width:250px;">
      <legend><b>Suche:</b></legend>
      <form action="" method="get">

<!-- onkeyup aktulisiert die Liste - on keypress wäre zu früh -->
         <input type="text" value="" name="q" id="q" onkeyup="updateList();" />
         <input type="submit" value="Senden" />

</form>

<!-- das ziel-DIV für die gefundenen Vorschläge -->
      <div id="avail" style="overflow:auto; height:100px; margin:5px; ">&nbsp;</div>

</fieldset>

</body>
</html>

##################################

suggest.php:

<?php

// Zur Vereinfachung nur statische Werte
 $options= array(
            'Hund', 'Katze', 'Maus',
            'Auto', 'Haus', 'Sommer',
            'Winter','Sonne', 'Fahrrad',
            'Kind','Familie', 'Spass', 'Urlaub',
            'Spielzeug','Computer','Internet',
            'PHP','JavaScript','Mozilla','XML'
           );

$xml='<?xml version="1.0" encoding="iso-8859-1" ?>';

if (!$_GET['q']) {
    // keine Daten - kein Query
    $xml .= '<empty />';
 } else {
 // Passende Einträge finden
   $match=array();
   foreach ($options as $opt) {
      // stripos workaround für php4:
      // $q=strtolower($_GET['q']);
      // if (strpos(strtolower($opt),$q)===0) {

if (stripos($opt,$_GET['q'])===0) {
        $match[]="<li>$opt</li>";
      }
   }
   sort($match);
   $xml .= "<suggest xmlns='http://www.w3.org/1999/xhtml'><ul>\n".join("\n",$match)."</ul></suggest>";
 }

header('Content-Type: text/xml');
 echo $xml;

?>

trotzdem das php-skript inhalte zurücksendet, wird das alertwindow geöffnet. also ist das "if (xhttp.responseText)..." falsch?
bin noch ajax newbie und freue mich über hinweise.

viele grüsse!

tomm

  1. hi,

    // onLoad Handler setzen
          xhttp.onload=updateList_callback;

    Was willst du hier mit onload?

    Der passende Handler zum Reagieren auf die Statusveränderung eines asynchronen XMLHTTPRequest heißt onreadystatechange.

    http://developer.apple.com/internet/webcontent/xmlhttpreq.html
    http://jibbering.com/2002/4/httprequest.html

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. »

      Der passende Handler zum Reagieren auf die Statusveränderung eines asynchronen XMLHTTPRequest heißt onreadystatechange.

      danke! geht aber auch damit nicht... :-(

      1. hi,

        danke! geht aber auch damit nicht... :-(

        "Geht nicht" geht nicht.

        Tipps für Fragende

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }