Moin Leute, ich hab ein etwas groesseres Problem, und zwar versteh ich nicht ganz, warum mein meine Inputfelder nicht gefüllt werden:
Es geht sich um folgendes, die Idee war es, ein Änderungsformular bei bestehenden Daten automatisch füllen zu lassen, wenn der Benutzer es denn möchte:
Also dachte ich da spontan an Ajax...
Naja, war ja alles relativ simpel...
Das Problem ist aber, er fügt mit die Felder nicht ein...
Firebug sagt dass hier:
document.getElementById(id) has no properties
document.getElementById(id).value = unescape(value);
jetzt kommts aber: warum is das so? ich hab doch meiner Ansicht nach alles richtig gemacht, das lustige ist nämlich auch: Im Internet Explorer funktionierts...
schaut euch mal die processreqchange funktion an [2. Codefeld] und guck euch mal die Methode an, ich finde ich habe alles richtig gemacht, also was soll dieses
"has no properties"?!
hier unten mal der vollständigkeit halber der komplette Code zu diesem Thema...
aber jetzt kommts, die entscheidende Funktion:
aufgerufen wird das ganze so:
so, hier dann nochmal der inhalt der test.php:
Es geht sich um folgendes, die Idee war es, ein Änderungsformular bei bestehenden Daten automatisch füllen zu lassen, wenn der Benutzer es denn möchte:
Also dachte ich da spontan an Ajax...
Naja, war ja alles relativ simpel...
Das Problem ist aber, er fügt mit die Felder nicht ein...
Firebug sagt dass hier:
document.getElementById(id) has no properties
document.getElementById(id).value = unescape(value);
jetzt kommts aber: warum is das so? ich hab doch meiner Ansicht nach alles richtig gemacht, das lustige ist nämlich auch: Im Internet Explorer funktionierts...
schaut euch mal die processreqchange funktion an [2. Codefeld] und guck euch mal die Methode an, ich finde ich habe alles richtig gemacht, also was soll dieses
"has no properties"?!
hier unten mal der vollständigkeit halber der komplette Code zu diesem Thema...
Code:
//AJAX ZEUG BEGINNT HIER:
var req;
function ajaxcall(url) {
req = false;
// natives XMLHttpRequest Objekt
if(window.XMLHttpRequest && !(window.ActiveXObject)) {
try {
req = new XMLHttpRequest();
} catch(e) {
req = false;
}
// Internet Exploder Pfusch...
// immer Microsofts Extrawürste...
} else if(window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
//wenn req aktiv, dann processreqchange funktion aufrufen wenn sich der Status ändert
if(req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send("");
} else
{
alert("error creating your AJAX Request")
}
}
aber jetzt kommts, die entscheidende Funktion:
Code:
function processReqChange() {
// wenn Fertig
if (req.readyState == 4) {
// und 200, also OK, kein 404 oder sonstwas
if (req.status == 200)
{
//füttere JSONDATA mit meinem Ergebnis vom AjaxCall
var jsondata = eval('(' + req.responseText + ')');
if(jsondata)
{
for (var i=0;i<jsondata.results.length;i++)
{
//TMP
confirm('Willst du die gefundenen Einstellungen importieren?')
//Objekt "zerlegen"
id = jsondata.results[i].id;
value = jsondata.results[i].value;
alert(id); //DEBUG
alert(value); //DEBUG
//Inputfelder füttern
document.getElementById(id).value = unescape(value);
}
}
} else {
alert("There was a problem retrieving the JSON data:\n" +
req.statusText);
}
}
}
aufgerufen wird das ganze so:
HTML:
<p><input type="text" name="lastname" class="fixed" maxlength="50" tabindex="10" onblur="ajaxcall('test.php?date='+this.value)"/><br />
Nachname
</p>
so, hier dann nochmal der inhalt der test.php:
PHP:
<?php
$row[0]['id'] = "name";
$row[0]['value'] = "Admin";
$row[1]['id'] = "lastname";
$row[1]['value'] = "allmächtig";
$row[2]['id'] = "title";
$row[2]['value'] = "Chef";
$row[3]['id'] = "comment";
$row[3]['value'] = "asdftest \\nThis is a Comment alter!";
//header("Content-Type: application/json");
echo "{\"results\": [";
$arr = array();
for ($i=0;$i<count($row);$i++)
{
$arr[] = "{\"id\": \"".urlencode($row[$i]['id'])."\", \"value\": \"".urlencode($row[$i]['value'])."\"}";
}
echo implode(", ", $arr);
echo "]}";
?>