Problem mit XML-Request

visiondpc

Erfahrenes Mitglied
Hallo, ich steh grade kurz vorm Durchdrehen weil ich das Problem nicht finde und hoffe Ihr könnt mir weiterhelfen.
Ich möchte mir mittels AJAX und PHP Daten aus einer DB holen und diese in ein Formular eintragen.
Das AJAX-Skript wird mittels PHP erzeugt und arbeitet bis auf bei einem Formular Problemlos. Also klann es daran eigentlich nicht liegen. Bei dem besagten Formular wird jedoch nur ein Wert ins erste Feld eingetragen. der Rest bleibt leer obwohl ich einen vollständigen XML-String erhalte.


Hier mal das generierte AJAX-Skript:
Code:
// Funktion setRequestedit(XML-Request)
var requestedit = false;
function setRequestedit(gets)
{
	if(window.XMLHttpRequest)
	{
		requestedit = new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		try
		{
			requestedit = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e)
		{
			try
			{
				requestedit = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e) {}
		}
	}
	if(!requestedit)
	{
		alert('XMLHTTP-Instanz konte nicht erzeugt werden.');
		return false;
	}
	else
	{
		var url = "benutzer_ajax.php";
		requestedit.open('post', url, true);
		requestedit.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		requestedit.send('action=get'+'&gets='+gets);
		requestedit.onreadystatechange = interpretRequestedit;
	}
}
function interpretRequestedit()
{
	switch (requestedit.readyState)
	{
		case 4:
		if (requestedit.status != 200)
		{
			alert('Fehler:'+requestedit.status);
		}
		else
		{
			var xmlcontent = requestedit.responseXML;
			document.getElementById('form_login').value = xmlcontent.getElementsByTagName('form_login')[0].firstChild.nodeValue;
			document.getElementById('form_mail').value = xmlcontent.getElementsByTagName('form_mail')[0].firstChild.nodeValue;
			document.getElementById('form_vorname').value = xmlcontent.getElementsByTagName('form_vorname')[0].firstChild.nodeValue;
			document.getElementById('form_name').value = xmlcontent.getElementsByTagName('form_name')[0].firstChild.nodeValue;
			document.getElementById('form_id').value = xmlcontent.getElementsByTagName('form_id')[0].firstChild.nodeValue;
			values = xmlcontent.getElementsByTagName('form_gruppen')[0].firstChild.nodeValue.split(',');
			list = document.getElementById('form_gruppen');
			for(s=0;s<values.length;s++)
			{
				for(t=0;t<list.length;t++)
				{
					if(list.options[t].value==values[s])
					{
						list.options[t].selected = true;
					}
				}
			}
		}
		break;
		default:
		break;
	}
}

Die XML-Datei:
Code:
<formatname>
<form_id>1</form_id>
<form_login>testuser</form_login>
<form_mail>test@test.de</form_mail>
<form_vorname>Test</form_vorname>
<form_name>User</form_name>
<form_gruppen>1,2,3</form_gruppen>
</formatname>

Und das Formular:
HTML:
<table cellpadding="4" width="100%" cellspacing="1" border="0" class="main_tbl">
	<tr>
		<td colspan="2" class="headline">Benutzer anlegen</td>
	</tr>
	<tr class="row_a">
		<td><strong>Login-Name:</strong></td> 
		<td><input name="form_login" type="text" id="form_login" maxlength="20" /></td>
	</tr>
	<tr class="row_b">
		<td><strong>Passwort:</strong></td>
		<td>
			<input name="form_passwd" type="text" id="form_passwd" maxlength="20" /> 
			<img src="images/crypt.png" onclick="generate(8, 'form_passwd')" style="cursor:pointer;" alt="Passwort setzen" />  
 		</td>
	</tr>
	<tr class="row_a">
		<td><strong>Email:</strong></td>
		<td><input name="form_mail" type="text" maxlength="30" id="form_email" /></td>
	</tr>
	<tr class="row_b">
		<td><strong>Vorname:</strong></td>
		<td><input name="form_vorname" type="text" id="form_vorname" maxlength="30" /></td>
	</tr>
	<tr class="row_a">
		<td><strong>Nachname:</strong></td>
		<td><input name="form_name" type="text" id="form_name" maxlength="30" /></td>
	</tr>
	<tr class="row_b">
		<td><strong>Benutzergruppen:</strong></td>
		<td>
               		<select name="form_gruppen" size="5" multiple="multiple" id="form_gruppen" style="float:left;">
				<option value="1">Administrator</option>
				<option value="3">Lager</option>
				<option value="2">Verkauf</option>
			</select>
			Mehrfachauswahl durch gedr&uuml;ckte [strg]-Taste.    
		</td>
	</tr>
	<tr class="row_c">
		<td><input type="hidden" name="form_id" id="form_id" /></td>
		<td>
	               	<div id="dbdiv">
	               		<img src="images/save.png" alt="speichern" onclick="setRequestdb('action:db');" style="cursor:pointer;" /> 
	                    	<img src="images/close.png" alt="exit" style="cursor:pointer;" onclick="document.getElementById('userform').style.display='none';" />
			</div>
			<div id="dbloader" class="loader">
				<img src="images/loader2.gif" alt="loading" /> Bitte warten
			</div>
		</td>
	</tr>
</table>

Danke schonmal im Vorraus.
 
Hi,

du greifst in der Anweisung
Code:
document.getElementById('form_mail').value = xmlcontent.getElementsByTagName('form_mail')[0].firstChild.nodeValue;
auf das Element mit der ID form_mail zu. Im Dokument selbst existiert jedoch nur ein Element mit der ID form_email. Wenn du diese änderst, sollte das Script eigentlich funktionieren.

Ausserdem rufst du im Dokument eine Funktion mit dem Name setRequestdb auf. Korrekt heisst sie jedoch setRequestedit.

Vielleicht hilft dir das weiter.

Ciao
Quaese
 
Ok danke das mit dem Mailfeld war ein Tippfehler. Ich hab es angepasst, aber das Ergebnis bleibt das Gleiche. Es wird nur das erste Formularfeld ausgefüllt.
Das mit setRequestdb und setRequestedit ist schon richtig. setRequestedit soll die Werte aus der Datenbank ins Formular setzen, setRequestdb speichert diese Werte wieder in der Datenbank.
 
Ich vermute mal, dass nicht der XMLHttpRequest fehlschlägt, sondern eher die Verarbeitung des Text-Strings.

Geh doch hier mal schrittweise vor und löse Dich vom Formular. Gib im Alert mal den Inhalt der Variablen "xmlcontent" wieder - wurde diese korrekt befüllt?

Wenn der XML String korrekt dort abgelegt ist, muss es wohl an der Art liegen, wie Du auf die Elemente dort zugreifst, bzw. dass der Zeiger beim Parsen nicht zum zweiten Element springt?
 
Ich habs gefunden. Verstehen tu ich es zwar nicht, aber so gehts.
Mir ist aufgefallen, dass dies das einzige Formular ist, bei dem die Reihenfolge der Elemente im XML Dokument anders ist als sie im AJAX-Skript abgearbeitet werden.
Ich hab die jetzt mal umsortiert und siehe da, es klappt.
Komisch nur, da die Reihenfolge durch eindeutige ID's und Tag's doch eigentlich egal sein sollte.
Danke für die Hilfe.
 

Neue Beiträge

Zurück