XML -> JavaScript
Reiner
- xml
Hallo,
ich muß ehrlich sagen, dass ich mich bisher mit XML nicht beschäftigt hatte.
Einen Erfolg hatte ich aber schon nach ein paar Stunden.
Probleme hatte ich vor allem mit einigen komischen Effekten, wie der Tatsache, dass FF wohl nicht domainübergreifend per Ajax auf eine XML-Datei zugreifen will, MSIE schon und einige Probleme mit Zeichensätzen.
Ich habe dazu eine kleine Testseite geschrieben. Würde mich über Feedback freuen:
http://www.rusch-hour.com/xml
(xml: http://www.rusch-hour.com/xml/sms2web-1.xml)
Der Hintergrund:
Ich will es schaffen, Daten aufzunehmen (werden einfach in DB gespeichert) und diese nach XML zu transferieren. Die max. zu erwartenden Daten (Eingang) wären Datum, Mobilfunknummer und eigentlicher Inhalt.
Auf der Optionsseite steht:
Auf der JS-Seite (siehe Beispielseite) steht eine Funktion, die die XML-Daten auswerten kann.
"Kann" vom User angepaßt werden. Ziel ist aber, dazu Templates für Ticker, Newsbereiche, usw. bereitzustellen. (Z.B. sowas: http://www.rusch-hour.com/xml/index2.html)
Soviel zum Überblick.
Mich würde interessieren, ob ich generell einen falschen Weg nutze, einiges verbesserungswürdig ist!
Vielen Dank!
Reiner
Hallo,
ich muß ehrlich sagen, dass ich mich bisher mit XML nicht beschäftigt hatte.
Einen Erfolg hatte ich aber schon nach ein paar Stunden.
Probleme hatte ich vor allem mit einigen komischen Effekten, wie der Tatsache, dass FF wohl nicht domainübergreifend per Ajax auf eine XML-Datei zugreifen will, MSIE schon und einige Probleme mit Zeichensätzen.
Ich habe dazu eine kleine Testseite geschrieben. Würde mich über Feedback freuen:
http://www.rusch-hour.com/xml
(xml: http://www.rusch-hour.com/xml/sms2web-1.xml)
Der Hintergrund:
Ich will es schaffen, Daten aufzunehmen (werden einfach in DB gespeichert) und diese nach XML zu transferieren. Die max. zu erwartenden Daten (Eingang) wären Datum, Mobilfunknummer und eigentlicher Inhalt.
Auf der Optionsseite steht:
Auf der JS-Seite (siehe Beispielseite) steht eine Funktion, die die XML-Daten auswerten kann.
"Kann" vom User angepaßt werden. Ziel ist aber, dazu Templates für Ticker, Newsbereiche, usw. bereitzustellen. (Z.B. sowas: http://www.rusch-hour.com/xml/index2.html)
Soviel zum Überblick.
Mich würde interessieren, ob ich generell einen falschen Weg nutze, einiges verbesserungswürdig ist!
Vielen Dank!
Reiner
Hallo,
Also, wenn ich Dich richtig verstehe, wird das ganze eine Art XML-Schnittstelle für Deine Datenbank, richtig?
Keine schlechte Idee...find Deinen Ansatz recht brauchbar.
Du hast von Templates für Ticker, Newsbereiche usw. gesprochen:
Falls diese Sachen auch auf einem FREMDEN Server laufen sollen, beachte, dass das mit klassischem AJAX mit XML dann nicht funktioniert!
Beispiel:
Ich will auf meiner Domain www.meine-domain.de einen Newsticker einbinden, der Deine XML-Schnittstelle anspricht und die XML-Daten ausliest und Anzeigt oder was auch immer damit tut. Dies geht nicht über Deinen Server, da streikt der Browser (Stichwort "Same origin Policy")
Ausweg wäre nur, dass auf MEINEM Server (www.meine-domain.de) ein Prozess (PHP/Perl-Script o.ä.) läuft, der DEINE XML-Datei abruft und sie dann an den Browser weiterreicht - was wieder vom Durchsatz her u.Umständen nicht so wünschenswert ist.
Solang aber auch die Seite, die auf Deine XML-Schnittstelle zugreift (also den AJAX-Request macht) auch auf Deiner Domain liegt, gibts keine Probleme.
Falls Du auf Deine Schnittstelle nur per JavaScript zugreifst, könntest Du Dir auch überlegen, statt XML JSON als Ausgabeformat zu verwenden. Hier sind die Bestimmungen für die "Same Origin Policy" auch nicht so streng, so dass Du mit ein bisschen Tricksen auch auf fremden Seiten Deine Inhalte einbinden kannst (z.b. mit Dynamic Script tags.
Vorteile von JSON gegenüber XML:
Nachteile von JSON gegenüber XML:
Fazit:
XML, wenn:
JSON, wenn:
Hope that helps,
Jörg
Hallo,
Also, wenn ich Dich richtig verstehe, wird das ganze eine Art XML-Schnittstelle für Deine Datenbank, richtig?
Keine schlechte Idee...find Deinen Ansatz recht brauchbar.
echt? Ich habe mich damit vorher nie beschäftigt.
Einfach per Trial and Error ein paar Beispiele zusammengeklickert.
Mit der serverseitigen Seite kenne ich damit sehr gut aus.
Naja, egal.
Du hast von Templates für Ticker, Newsbereiche usw. gesprochen:
Falls diese Sachen auch auf einem FREMDEN Server laufen sollen, beachte, dass das mit klassischem AJAX mit XML dann nicht funktioniert!
Das ist geklärt (siehe andere Antwort).
Der User/Kunde darf das JavaScript hinterlegen!
Falls Du auf Deine Schnittstelle nur per JavaScript zugreifst, könntest Du Dir auch überlegen, statt XML JSON als Ausgabeformat zu verwenden. Hier sind die Bestimmungen für die "Same Origin Policy" auch nicht so streng, so dass Du mit ein bisschen Tricksen auch auf fremden Seiten Deine Inhalte einbinden kannst (z.b. mit Dynamic Script tags.
danke! Über JSON habe ich mich gerade mal etwas schlau gemacht.
Aber ich glaube, das will ich nicht.
Ich will eine klare Struktur, die nicht nur für JS geeignet ist.
Da ich jetzt auch eine XML Datei habe, könnte man diese extern vielleicht auch nutzen (sofern der User davon Ahnung hat).
Vorteile von JSON gegenüber XML:
- Weniger Overhead (=schnellere Datenübertragung)
Ist, denke ich, nicht das große Problem.
Die Daten sind rel. klein.
- JSON benutzt JavaScript-Objekte, die Du direkt in JavaScript nutzen kannst
(kein mühsames Parsen des XML-DOM-Baumes).
hört sich gut an. Aber JS ist mehr die Krücke, um die Daten flexibel weiterzuverarbeiten.
Nachteile von JSON gegenüber XML:
- nicht so standardisiert wie XML (gibt wenig Tools zum Validieren usw.),
dadurch- fehleranfälliger
- Unterstützung nicht durch jede Software/Programmiersprache
Das ist schlecht, oder?
Fazit:
XML, wenn:
- Zugriff auch per anderer Software oder andere Programmiersprachen möglich
sein soll- Einfache/automatische Prüfung auf Validität gewährleistet werden soll/muss
JSON, wenn:
- Zugriff ausschliesslich oder in erster Linie per JavaScript erfolgt
- Same Origin Policy (s.o.) den Einsatz von XML verbietet.
Ich danke auch sehr! Ich denke über die Vor- und Nachteile mal nach und mache mich weiter schlau.
Eine Frage noch. In einem anderen Forum wurde mir gesagt, meine XML-Datei sieht komisch aus.
Bei der Programmierung wollte ich das eigentlich anders machen:
<Daten>
<Tag1>Eintrag1</Tag1>
<Tag2>Eintrag2</Tag2>
</Daten>
kam aber an die Daten per JS irgendwie nicht dran.
Jetzt ist die Struktur so:
<Daten>
<Tag1 value="Eintrag1"></Tag1>
<Tag2 value="Eintrag2"></Tag2>
</Daten>
was funktioniert. Mache ich damit einen groben Fehler?
Gruß
Reiner
Hallo,
Falls diese Sachen auch auf einem FREMDEN Server laufen sollen, beachte, dass das mit klassischem AJAX mit XML dann nicht funktioniert!
Das ist geklärt (siehe andere Antwort).
Der User/Kunde darf das JavaScript hinterlegen!
Ich fürchte, du hast nicht verstanden, was man dir die ganze Zeit sagen will. Wenn eine fremde Site dein Script einbindet, ob nun als Kopie oder direkt von deiner Site, dann kann es noch längst nicht auf per XMLHttpRequest auf andere HTTP-Ressourcen auf deiner Site zugreifen. Wie willst du das Problem lösen mit XMLHttpRequest?
Bei der Programmierung wollte ich das eigentlich anders machen:
<Daten>
<Tag1>Eintrag1</Tag1>
<Tag2>Eintrag2</Tag2>
</Daten>kam aber an die Daten per JS irgendwie nicht dran.
Dann lerne das DOM. Weißt du, was Textknoten sind? Sie haben jedenfalls eine Eigenschaft namens nodeValue, in der der jeweilige Textinhalt drinsteht.
<Tag1 value="Eintrag1"></Tag1>
Mache ich damit einen groben Fehler?
Ja. Das ist Unsinn.
Mathias
Hallo,
Falls diese Sachen auch auf einem FREMDEN Server laufen sollen, beachte, dass das mit klassischem AJAX mit XML dann nicht funktioniert!
Das ist geklärt (siehe andere Antwort).
Der User/Kunde darf das JavaScript hinterlegen!Ich fürchte, du hast nicht verstanden, was man dir die ganze Zeit sagen will. Wenn eine fremde Site dein Script einbindet, ob nun als Kopie oder direkt von deiner Site, dann kann es noch längst nicht auf per XMLHttpRequest auf andere HTTP-Ressourcen auf deiner Site zugreifen. Wie willst du das Problem lösen mit XMLHttpRequest?
ups, Du hast Recht! Blöder Fehler.
<Tag1 value="Eintrag1"></Tag1>
Mache ich damit einen groben Fehler?
Ja. Das ist Unsinn.
Danke.
Hallo,
dass FF wohl nicht domainübergreifend per Ajax auf eine XML-Datei zugreifen will
Das kann kein derzeit verbreiteter Browser so ohne weiteres.
MSIE schon und einige Probleme mit Zeichensätzen.
MSIE solltest du immer UTF-8-kodierte Daten als Antwort auf XMLHttpRequest-Anfragen vorsetzen.
Ich will es schaffen, Daten aufzunehmen (werden einfach in DB gespeichert) und diese nach XML zu transferieren.
Warum?
XML ist erstmal ein Speicher-/Austausch-/Übertragungsformat für geordnete Daten.
Es gibt andere Techniken, die je nach Kontext diese Aufgabe besser erfüllen. (»Weder noch« ist oftmals auch eine Alternative.)
Meine Fragen wären:
Warum wählst du XML? Um Daten vom Client zum Server zu übertragen?
Warum wählst du JavaScript und baust die Dokumente nicht serverseitig zusammen?
Warum wählst du synchrones XMLHttpRequest und XML und nicht andere Übertragungsformate wie z.B. JSON?
Meine Lieblingsfrage ist natürlich: Was hast du eigentlich vor? Warum hast du das jetzige Konglomerat an Techniken gewählt? Was soll letztlich dabei herumkommen, was sind die Anforderungen? Das wird aus deinen Postings noch nicht klar.
Willst du so eine Art Webservice bauen, eine Funktionalität, die andere auf fremden Sites einbinden können?
Dann wären wir wieder beim Anfang: Cross-Domain-Ajax geht noch nicht, höchstens das serverübergreifende Einbinden von Scripten, also auch von JSON-Daten.
Mathias
Hi,
erstmal danke für das Feedback!
dass FF wohl nicht domainübergreifend per Ajax auf eine XML-Datei zugreifen will
Das kann kein derzeit verbreiteter Browser so ohne weiteres.
MSIE schon und einige Probleme mit Zeichensätzen.
MSIE solltest du immer UTF-8-kodierte Daten als Antwort auf XMLHttpRequest-Anfragen vorsetzen.
ok, damit werde ich mich nochmal im Detail auseinandersetzen!
Ich will es schaffen, Daten aufzunehmen (werden einfach in DB gespeichert) und diese nach XML zu transferieren.
Warum?
siehe unten
XML ist erstmal ein Speicher-/Austausch-/Übertragungsformat für geordnete Daten.
Es gibt andere Techniken, die je nach Kontext diese Aufgabe besser erfüllen. (»Weder noch« ist oftmals auch eine Alternative.)Meine Fragen wären:
Warum wählst du XML? Um Daten vom Client zum Server zu übertragen?
Das XML soll in einfachster Form nur ein Container für die Daten sein.
Warum wählst du JavaScript und baust die Dokumente nicht serverseitig zusammen?
Um das ganze flexibel zu halten.
Da das JS ja - wie festgestellt - auf meinem Server bleiben muß, darf der User dieses dort erzeugen (lassen). An die Daten (XML) soll er nicht dran.
Aber die Ausgabe soll er steuern können. Ich will das ja gar nicht fest verdrahtet vorgeben. JS ist also der Teil, der das flexibel halten soll.
Warum wählst du synchrones XMLHttpRequest und XML und nicht andere Übertragungsformate wie z.B. JSON?
Hast Du ein Beispiel bzw. kannst mir Quellen nennen und die Vorzüge?
Deswegen frage ich ja, d.h. bin offen für solche Vorschläge!
Meine Lieblingsfrage ist natürlich: Was hast du eigentlich vor? Warum hast du das jetzige Konglomerat an Techniken gewählt? Was soll letztlich dabei herumkommen, was sind die Anforderungen? Das wird aus deinen Postings noch nicht klar.
Willst du so eine Art Webservice bauen, eine Funktionalität, die andere auf fremden Sites einbinden können?
Genau! ;-)
Dann wären wir wieder beim Anfang: Cross-Domain-Ajax geht noch nicht, höchstens das serverübergreifende Einbinden von Scripten, also auch von JSON-Daten.
Die Frage haben wir wohl geklärt. Damit hatte ich nur am Anfang Probleme...! ;-)
Ich danke Dir vielmals!
Hallo,
Warum wählst du synchrones XMLHttpRequest und XML und nicht andere Übertragungsformate wie z.B. JSON?
Hast Du ein Beispiel bzw. kannst mir Quellen nennen und die Vorzüge?
JSON ist nichts anderes als JavaScript-Code. Mit üblichen Objects, Arrays, Strings, Numbers, Booleans usw. kann man Datenstrukturen notieren, wie man es sonst in XML macht.
<Daten>
<Datensatz id="41">
<Zeit value="2008-03-09 22:54:37"></Zeit>
<Content value="öüß"></Content>
</Datensatz>
...
</Daten>
kannst du in Form eines JavaScript-Arrays mit Objects drin so notieren:
var daten = [
[
id : 41,
zeit : "2008-03-09 22:54:37", // oder ein JavaScript-Date-Objekt
content : "öüß"
],
...
];
Sowas kannst du recht einfach serverseitig generieren, die meisten Sprachen haben dafür Helferfunktionen.
Der Vorteil ist:
Mathias
Danke! Du hast mir sehr geholfen!!!
var daten = [
[
id : 41,
zeit : "2008-03-09 22:54:37", // oder ein JavaScript-Date-Objekt
content : "öüß"
],
...
];
Korrektur:
~~~javascript
var daten = [
{
id : 41,
zeit : "2008-03-09 22:54:37",
content : "öüß"
},
...
];
[ ... ] ist ein Array-Literal,
{ ... } ein Object-Literal (verhält sich hier wie ein Hash bzw. »assoziativer Array«).
Es ist wie gesagt ein Array, der Object-Objekte als Elemente enthält.
Mathias