Witam,
Mam problem z AJAX'em. Chce zrobić coś takiego, że po wybraniu opcji z jednego selecta, ładuje się drugi select. Jednak drugi select sie nie laduje i wywala mi błąd przy warunku na r.ResponseXML == null, jednak responseText jest ok. Plik XML generowany jest przez PHP i wyświetla się poprawnie w przeglądarce. Gdzie może być błąd?
index.php
function getXMLHttpRequest() {
var request = false;
try {
request = new XMLHttpRequest();
} catch(err1) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch(err2) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch(err3) {
request = false;
}
}
}
return request;
}
var r;
r = getXMLHttpRequest();
function ajax(param){
r.open('GET', 'response.php?'+param, true);
r.onreadystatechange = processResponse;
r.send(null);
}
function processResponse(){
if (r.readyState == 4) {
if (r.status == 200) {
if(r.ResponseXML==null || !r.ResponseXML.documentElement) alert("niepoprawna struktura xml: \n" + r.responseText);
var rootNodeName = r.ResponseXML.documentElement.nodeName;
if(rootNodeName == "parsererror") alert("Niepoprawna struktura xml");
var root = r.ResponseXML.getElementsByTagName('response')[0];
var lekarze = root.getElementsByTagName('lekarze')[0];
var lekarz = lekarze.getElementsByTagName('lekarz')[0];
for(var i=0; i<lekarz.length; i++){
document.getElementById("lekarz").options[i] = new Option(lekarz[i].getElementsByTagName('id')[0].firstChild.nodeValue, lekarz[i].getElementsByTagName('im_naz')[0].firstChild.nodeValue);
}
}
}
}
//...
<select name="poradnia" id="poradnia" onChange="ajax('param=lekarz&id='+document.getElementById('poradnia').value);">
//<opcje>
</select>
<select name="lekarz" id="lekarz"></select>
response.php
<?php
header('Content-type: text/xml');
require ("mysql_ap.php");
$param = strip_tags($_GET['param']);
$id = strip_tags($_GET['id']);
$query = "SELECT id_lekarza FROM Lekarz_poradnia WHERE id_poradni='".$id."'";
$result = mysql_query($query) or die ("Blad przy wykonywaniu zapytania: " .mysql_error());
$num = mysql_num_rows($result);
if ($num > 0)
{
$zmienna='<?xml version="1.0" encoding="utf-8" ?>';
$zmienna.='<response>';
$zmienna.= '<lekarze>';
while($lek = mysql_fetch_row($result))
{
$zmienna.='<lekarz>';
$result2 = mysql_query("SELECT id_personelu, imie, nazwisko FROM Dane_personelu WHERE id_personelu='".$lek[0]."'");
if(mysql_num_rows($result2)>0)
{
while ($row = mysql_fetch_array($result2)) {
$zmienna.='<id>'.$row["id_personelu"].'</id>';
$zmienna.='<im_naz>'.$row["imie"].$row["nazwisko"].'</im_naz>';
}
}
$zmienna.='</lekarz>';
}
$zmienna.='</lekarze>';
$zmienna.='</response>';
echo $zmienna;
}
else
{
echo "Nie ma rekordów w bazie!";
}
?>