par
kristen » 14 févr. 2012, 12:51
J'essaie d'implémenter une aide à remplir un champ par auto-complétion. Ça marche ... sauf quand ça coince.
Pour une raison que je ne m'explique pas le navigateur me met parfois une fenêtre d'alerte me signalant un FirstChild null.
Pourtant le mot demandé existe bel & bien. J'en perds mon PHP, mon javascript et mon latin.
Voilà les codes :
1 - testajax.php
<?php
header('Content-Type: text/xml ; charset = ISO-8859-1');
include ('connect.inc.php');
$dom = new DOMDocument();
$respont = $dom->createElement('respont');
$dom->appendChild($respont);
$name = $_GET['name'];
$kinnigou = mysql_query("SELECT poz FROM ajaks WHERE poz LIKE '".$name."%"."' LIMIT 20");
while ($linenn = mysql_fetch_array($kinnigou))
{
$kinnig = $dom->createElement('kinnig');
$kinnigText = $dom->createTextNode("$linenn[poz]");
$kinnig->appendChild($kinnigText);
$respont->appendChild($kinnig);
}
$xmlString = $dom->saveXML();
echo $xmlString;
mysql_close();
?>
2 - la partie concernée en javascript
Code : Tout sélectionner
function handleRequestStateChange()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200) // || xmlHttp.status == 304)
{
try
{
handleServerResponse();
}
catch(e)
{
alert("Erreur de lecture de la réponse : " + e.toString());
}
}
else
{
alert("Problème d'obtention des données :\n" + xmlHttp.statusText);
}
}
}
function handleServerResponse()
{
var xmlResponse = xmlHttp.responseXML;
xmlRoot = xmlResponse.documentElement;
kinnigArray = xmlRoot.getElementsByTagName("kinnig");
var html = "";
for (var i=0; i<kinnigArray.length; i++)
{html += kinnigArray.item(i).firstChild.data + "<br/>";}
var xmlResponse = xmlHttp.responseText;
var myDiv = document.getElementById("goulakaat");
myDiv.innerHTML = html;
}
La table ajaks contient une série de mots triés alphabétiquement. Si je tape dans mon formulaire la lettre b, j'obtiens bien les 20 premiers mots commençant par cette lettre. Idem avec ba et même bar. Mais si je tape barr, cela provoque l'erreur mentionnée (exactement : kinnigArray.item(i).firstChild is null), alors que ma table contient des mots commençant par barr...
Merci de votre aide
J'essaie d'implémenter une aide à remplir un champ par auto-complétion. Ça marche ... sauf quand ça coince.
Pour une raison que je ne m'explique pas le navigateur me met parfois une fenêtre d'alerte me signalant un FirstChild null.
Pourtant le mot demandé existe bel & bien. J'en perds mon PHP, mon javascript et mon latin.
Voilà les codes :
1 - testajax.php
[php]<?php
header('Content-Type: text/xml ; charset = ISO-8859-1');
include ('connect.inc.php');
$dom = new DOMDocument();
$respont = $dom->createElement('respont');
$dom->appendChild($respont);
$name = $_GET['name'];
$kinnigou = mysql_query("SELECT poz FROM ajaks WHERE poz LIKE '".$name."%"."' LIMIT 20");
while ($linenn = mysql_fetch_array($kinnigou))
{
$kinnig = $dom->createElement('kinnig');
$kinnigText = $dom->createTextNode("$linenn[poz]");
$kinnig->appendChild($kinnigText);
$respont->appendChild($kinnig);
}
$xmlString = $dom->saveXML();
echo $xmlString;
mysql_close();
?>
[/php]
2 - la partie concernée en javascript
[code]
function handleRequestStateChange()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200) // || xmlHttp.status == 304)
{
try
{
handleServerResponse();
}
catch(e)
{
alert("Erreur de lecture de la réponse : " + e.toString());
}
}
else
{
alert("Problème d'obtention des données :\n" + xmlHttp.statusText);
}
}
}
function handleServerResponse()
{
var xmlResponse = xmlHttp.responseXML;
xmlRoot = xmlResponse.documentElement;
kinnigArray = xmlRoot.getElementsByTagName("kinnig");
var html = "";
for (var i=0; i<kinnigArray.length; i++)
{html += kinnigArray.item(i).firstChild.data + "<br/>";}
var xmlResponse = xmlHttp.responseText;
var myDiv = document.getElementById("goulakaat");
myDiv.innerHTML = html;
}
[/code]
La table ajaks contient une série de mots triés alphabétiquement. Si je tape dans mon formulaire la lettre b, j'obtiens bien les 20 premiers mots commençant par cette lettre. Idem avec ba et même bar. Mais si je tape barr, cela provoque l'erreur mentionnée (exactement : kinnigArray.item(i).firstChild is null), alors que ma table contient des mots commençant par barr...
Merci de votre aide