[JS] AjaxCall mit JSON Rückgabe: Problem bei der Ausgabe

Kantholy

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
323
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...

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 "]}";
?>
 
Wäre schön wenn Du wenigstens den Lösungsansatz mitteilen könntest :-) Wird es ein getAttribute(); gewesen sein? Bedenke das der FF hier genauer ist und Elementen, die normalerweise keine id bekommen können auch entsprechend nicht auslesen kann.
 
der fehler war simpel. das komplette script war korrekt, nur hab ich bei den input feldern keine ID zugewiesen, somit liefert document.getElementById auch NULL aus...

jetzt hab ich denen alle ne id gegeben und schon funktionierts... war zu simpel der Fehler...
 

Ähnliche Themen

Zurück
Oben