Zeilenumbruch in JSON-Objekt erzeugt Fehler
johny7
- javascript
Moin allerseits,
ich versende mein Formular mit AJAX. Dafür lese ich die einzelnen Werte aus den Formularfeldern und füge sie in einem Objekt zusammen. Das übergebe ich dann an die AJAX-Funktion von jQuery. Das sieht folgendermaßen aus:
// Für jedes Input-Element, wird der Name und der Wert in einen String geschrieben
input += '"' + $(this).attr("name") + '" : "' + $(this).attr("value") + '",';
// Am Ende wird der String mit eval in ein Objekt umgewandelt
inputData = eval('({'+ input.substr(0,input.length-1) +'});');
// Dieses Objekt wird dann an AJAX übergeben
Wenn ich in einem Textfeld einen Zeilenumbruch habe wird ein Fehler erzeugt. Vermutlich sieht eval den Zeilenumbruch und kann mit dem Code nichts anfangen. Kann mir jemand sagen, wie ich das elegant lösen kann? Wie kann ich ein Objekt aufbauen, wo ich den Namen aus einer Variablen bestimme und den Inhalt auch? Und das Objekt in einer Schleife aufbauen.
Oder habe ich hier generell einen Konzeptionsfehler?
Grüße, JN
Hi!
Wenn ich in einem Textfeld einen Zeilenumbruch habe wird ein Fehler erzeugt.
Beachte die Regeln der Javascript-Syntax für die Notation von Stringliteralen.
Lo!
Moin allerseits,
Hi!
Wenn ich in einem Textfeld einen Zeilenumbruch habe wird ein Fehler erzeugt.
Beachte die Regeln der Javascript-Syntax für die Notation von Stringliteralen.
Ich habe bereits erkannt, dass ich einen Fehler erzeuge. Wie kann ich ihn aber beheben? Wie kann ich den Inhalt eines Textfeldes auslesen und dann die Umbrüche JavaScript-gerecht kodieren, bevor ich sie weitergebe?
Grüße, JN
Hi!
Beachte die Regeln der Javascript-Syntax für die Notation von Stringliteralen.
Ich habe bereits erkannt, dass ich einen Fehler erzeuge. Wie kann ich ihn aber beheben? Wie kann ich den Inhalt eines Textfeldes auslesen und dann die Umbrüche JavaScript-gerecht kodieren, bevor ich sie weitergebe?
Würdest du bitte zuerst den verlinkten Text lesen und dann konkret nachfragen, wenn du davon etwas nicht verstanden hast?
Lo!
Moin allerseits,
Würdest du bitte zuerst den verlinkten Text lesen und dann konkret nachfragen, wenn du davon etwas nicht verstanden hast?
Entschuldigung, den verlinkten Text habe ich gelesen und verstanden. Das Problem war mir auch schon vorher bekannt. Deshalb suche ich hier nach einer Lösung, nicht nach einer Beschreibung des Problems.
Noch einmal: Mit welcher Funktion ersetze ich die Zeilenumbrüche, die bei der Eingabe in das teaxtarea gesetzt werden, durch solche, die für JavaScript geeignet sind (also durch \n )?
Die Umbrüche werden nicht durch PHP erzeugt sondern von Hand eingegeben. Also muss ich sie nach der Eingabe (clientseitig) von JavaScirp für JavaScript (für eval) vorbereiten. Der Witz ist ja, dass ich den Inhalt des textarea auslesen und mit alert ausgeben kann. D.h. der Fehler taucht erst bei eval auf, weil eval da ein Zeilenende sieht und kein \n. Also muss ich diese Umbrüche durch \n ersetzen. Reicht es also, \n durch \n zu ersetzen, oder ist der von Hand eingegebene Zeilenumbruch ein anderer?
Ich hoffe, wir reden jetzt nicht völlig aneinander vorbei...
Grüße, JN
Hi!
Noch einmal: Mit welcher Funktion ersetze ich die Zeilenumbrüche, die bei der Eingabe in das teaxtarea gesetzt werden, durch solche, die für JavaScript geeignet sind (also durch \n )?
Mit der für die Ersetzung von Zeichenketten in Strings. Aus dem \r machst du die beiden Zeichen \ und r und statt einem \n notierst du \ und n. Die gezeigte PHP-Funktion kümmert sich noch um weitere Zeichen, die ebenfalls problematisch sind. Es schadet nicht, wenn du die ebenfalls berücksichtigst
Der Witz ist ja, dass ich den Inhalt des textarea auslesen und mit alert ausgeben kann.
In dem Fall verarbeitest du Daten.
D.h. der Fehler taucht erst bei eval auf, weil eval da ein Zeilenende sieht und kein \n.
Weil du hier aus Daten Code machen möchtest. Das interne Speichern von Daten ist kein Problem, auch nicht die Übernahme aus der Textarea. Erst der Kontextwechsel von Daten zu Code benötigt die Berücksichtigung der Regeln für Code.
Also muss ich diese Umbrüche durch \n ersetzen. Reicht es also, \n durch \n zu ersetzen, oder ist der von Hand eingegebene Zeilenumbruch ein anderer?
Es gibt nur die zwei bekannten Zeichen \r und \n, die bei einem Zeilenumbruch eine Rolle spielen.
Ich hoffe, wir reden jetzt nicht völlig aneinander vorbei...
So war das schon besser verständlich. Aber: Warum benötigst du überhaupt eval() und erzeugst das Objekt nicht direkt aus den gegebenen Daten?
Lo!
Moin allerseits,
Hi!
Noch einmal: Mit welcher Funktion ersetze ich die Zeilenumbrüche, die bei der Eingabe in das teaxtarea gesetzt werden, durch solche, die für JavaScript geeignet sind (also durch \n )?
Mit der für die Ersetzung von Zeichenketten in Strings. Aus dem \r machst du die beiden Zeichen \ und r und statt einem \n notierst du \ und n. Die gezeigte PHP-Funktion kümmert sich noch um weitere Zeichen, die ebenfalls problematisch sind. Es schadet nicht, wenn du die ebenfalls berücksichtigst
Der Witz ist ja, dass ich den Inhalt des textarea auslesen und mit alert ausgeben kann.
In dem Fall verarbeitest du Daten.
D.h. der Fehler taucht erst bei eval auf, weil eval da ein Zeilenende sieht und kein \n.
Weil du hier aus Daten Code machen möchtest. Das interne Speichern von Daten ist kein Problem, auch nicht die Übernahme aus der Textarea. Erst der Kontextwechsel von Daten zu Code benötigt die Berücksichtigung der Regeln für Code.
Also muss ich diese Umbrüche durch \n ersetzen. Reicht es also, \n durch \n zu ersetzen, oder ist der von Hand eingegebene Zeilenumbruch ein anderer?
Es gibt nur die zwei bekannten Zeichen \r und \n, die bei einem Zeilenumbruch eine Rolle spielen.
Vielen Dank für die Ausführungen.
Ich hoffe, wir reden jetzt nicht völlig aneinander vorbei...
So war das schon besser verständlich. Aber: Warum benötigst du überhaupt eval() und erzeugst das Objekt nicht direkt aus den gegebenen Daten?
Diese Frage habe ich in meinem ersten Post auch gestellt. Und ich habe danach gefragt, wie ich das anstellen soll. In PHP würde ich einfach ein Array anlegen und dann in der Schleife $mein_array[] = $inhalt schreiben. Aber mit JavaScript und bei Objekten bin ich mir nicht sicher.
Ich werde mich sehr freuen, von dir jetzt die gewünschte Antwort zu erhalten.
Grüße, JN
Hi!
Warum benötigst du überhaupt eval() und erzeugst das Objekt nicht direkt aus den gegebenen Daten?
Diese Frage habe ich in meinem ersten Post auch gestellt.
Entschuldigung, hatte ich nicht so genau gelesen. Siehe dort.
Lo!
Hi!
Wie kann ich ein Objekt aufbauen, wo ich den Namen aus einer Variablen bestimme und den Inhalt auch? Und das Objekt in einer Schleife aufbauen.
Nimm die Notation foo['bar'] = 'qux'; Statt 'bar' kann auch ein anderer Ausdruck (Variablenname, zusammengesetzter String) stehen.
Lo!