AJAX Problem
tomm
- xml
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=' ';
}
} 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; "> </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
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
»
Der passende Handler zum Reagieren auf die Statusveränderung eines asynchronen XMLHTTPRequest heißt onreadystatechange.
danke! geht aber auch damit nicht... :-(
hi,
danke! geht aber auch damit nicht... :-(
"Geht nicht" geht nicht.
gruß,
wahsaga