otto der viertel vor zwölfte: ajax - urlencodeter Text decodieren

Hi,
der Sender schickt in etwa folgendes:

{"text":"urlencodeter text","bild":""http://www.irgendwo.de/bild.gif"}

auf der Empfangsseite steht:

		  
function zplText(){  
	if(xhr.readyState ==4){  
  
		var daten = xhr.responseText;  
		daten = JSON.parse(daten);  
  
		document.getElementById("zText").innerHTML = daten[text];  
	}  
}  

das klappt aber nicht.
1. offensichtlich wurde durch JSON.parse() der ankommende String nicht in ein array überführt.
2. wie kriege ich den urlcodierten Text in javascript wieder decodiert?

Danke

  1. hi,

    1. wie kriege ich den urlcodierten Text in javascript wieder decodiert?

    Der ist nicht x-www-urlencoded. Wenn er es wäre, decodeURIComponent();

    Horst

  2. Hallo!

    Hi,
    der Sender schickt in etwa folgendes:

    {"text":"urlencodeter text","bild":""http://www.irgendwo.de/bild.gif"}

    Das ist übrigens invalides JSON (da ist ein " zuviel).

    var daten = xhr.responseText;
    daten = JSON.parse(daten);
    document.getElementById("zText").innerHTML = daten[text];

    das klappt aber nicht.

    Ja, weil keine Variable namens »text« existiert. Auf der JavaScript-Konsole müsste ein entsprechender Fehler angezeigt werden. Hast du dort mal geschaut?

    1. offensichtlich wurde durch JSON.parse() der ankommende String nicht in ein array überführt.

    Es kommt auch kein Array heraus, sondern ein Object.

    Auf die Eigenschaften eines Objekts kann man in JavaScript einfach so zugreifen:

    daten.text
    daten.bild

    1. wie kriege ich den urlcodierten Text in javascript wieder decodiert?

    In deinem Beispiel sehe ich keine URL-Kodierung, sondern nur eine unnötige JSON-String-Kodierung. In JSON kann man durchaus schreiben:

    { "bild": "http://www.example.com/foo/bar/quux.jpg" }

    Wenn Backslashes zum Escaping verwendet werden, dann werden die JSON-Parsing wieder rückgängig gemacht. JSON-Beispiel:

    { "text": "Text \\ mit \\ vielen \\ Backslashes" }

    Nach dem Parsen bekommt man folgenden String heraus:

    Text \ mit \ vielen \ Backslashes

    Wenn JSON sinnvoll verwendet wird, musst du wahrscheinlich nichts händisch dekodieren.

    Mathias

    1. Danke,

      Deine Erklärung hats gebracht.

      Ich war auf dem total falschen Dampfer, habs aber jetzt begriffen.
      Und es klappt :).