prayerslayer
Oar. Mh.
|
Hallo, vorneweg: Ich bin ein JavaScript-Noob. Bei unserem Webportal zur Ferienhausverwaltung (Uniprojekt, nix wofür ich Geld bekomm) wird auf der Startseite eine Bing Map angezeigt, welche die verfügbaren Häuser anzeigen soll. Die Häuser haben Latitute und Longitude gespeichert und mein Plan war die Daten JSON-formatiert irgendwie ins HTML Dokument zu schreiben, das eben auch die Karte enthält. Nach dem Laden der Karte wird mit JS der JSON-Block ausgelesen und die Pushpins in die Karte eingefügt. Erster Versuch mit hidden input field: Läuft nicht, da JSON Anführungszeichen enthält. Und wenn ich die escape ist es ja kein JSON mehr, oder? Zweiter Versuch mit div-Block und opacity=0: Hab eben dank Chrome Dev Tools herausgefunden, dass document.getElementById(jsonID) NICHT den Inhalt des div-Blocks zurückgibt Jetzt bin ich ein bisschen ratlos, vor allem weil es sicher bessere Lösungen gibt. Hat bitte wer einen Tip? tia!
Bearbeitet von prayerslayer am 07.06.2010, 10:20
|
Rektal
Here to stay
|
Mit "JSON-formatiert irgendwie ins HTML" kann ich jetzt nicht viel anfangen .. was soll das Ziel sein? Wenn du von hidden input sprichst, meinst du also nicht dem User irgendwie präsentieren? document.getElementById macht im Prinzip was der Name sagt "hol mir das DOM Element mit der angegebenen ID", siehe z.B. https://developer.mozilla.org/en/DO....getElementByID . Um den Inhalt eines Dom-Elementes zu lesen oder zu setzen gibts mehrere Wege und je nach Browser funktionieren die anders, würde daher vorschlagen eine JS Lib zu verwenden die das X-Browser macht, z.B. jQuery. Musst du jetzt aber nicht verwenden, wenn du genauer beschreiben kannst was dein Ziel ist, gehts vermutlich ohne auch.
|
prayerslayer
Oar. Mh.
|
Allgemeines Ziel ist dass in der Karte Pins angezeigt werden, die eine Kurzbeschreibung des jeweiligen Hauses, ein Bild und solche Sachen enthalten. Mit KML-Daten in Layer importieren (ähnlich wie hier unter "Import data into shape layers") hab ich es auch schon probiert. Das würde gehen, ist aber unpraktikabel weil die KML Datei im Internet sein muss. Mit "JSON-formatiert irgendwie ins HTML" kann ich jetzt nicht viel anfangen .. was soll das Ziel sein? Wenn du von hidden input sprichst, meinst du also nicht dem User irgendwie präsentieren? Ist in der Tat ungenau formuliert, sorry Das "irgendwie" kommt daher, da ich nicht weiß, was die beste Variante ist. Es soll nur für JS lesbar im HTML Dokument stehen. Der User soll das JSON nicht sehen (wozu auch?). Das Ziel ist, dass eine JS-Funktion das JSON lesen und umwandeln kann, damit sie dann die Pushpins zur Karte hinzufügt. document.getElementById macht im Prinzip was der Name sagt "hol mir das DOM Element mit der angegebenen ID", siehe z.B. https://developer.mozilla.org/en/DO....getElementByID Hab ich gemerkt. Dachte aber, dass ohne weitere Angaben der Inhalt geliefert wird. Um den Inhalt eines Dom-Elementes zu lesen oder zu setzen gibts mehrere Wege und je nach Browser funktionieren die anders, würde daher vorschlagen eine JS Lib zu verwenden die das X-Browser macht, z.B. jQuery. Hm, jQuery haben wir sowieso schon drin. Welchen Teil der Library sollte ich mir da anschauen? //Edit: Ah, feine Sache. Mit $('#jsonID').html() gehts Nur will jetzt die eval-Funktion mein valides JSON nicht lesen ///Edit: Statt eval() JSON.parse() und Variable richtig ansprechen, dann funktionierts Danke für den Hint auf jQuery!
Bearbeitet von prayerslayer am 04.06.2010, 19:54
|
prayerslayer
Oar. Mh.
|
Doch nicht ganz solved, ich hab hier eine Verständnisfrage. Laut meinem alert() wird $(document).ready() nur auf der Startseite aufgerufen und nicht bei jedem Seitenaufruf. Gehört das so? Der Header, wo die Scripts drinstehen, ist bei jeder Seite derselbe, kanns sein dass der gecached wird? Aber dann müsste ja beim 2. Aufruf der Startseite auch kein alert() mehr kommen, was aber der Fall ist. Ich bin verwirrt
|
Rektal
Here to stay
|
Schau mal mit Firebug ob auf den anderen Seiten auch wirkliche alle Daten geladen werden konnten (sprich JS), nicht das es da wegen Pfaden oder so 404er Fehler gibt.
|
prayerslayer
Oar. Mh.
|
Ich hab laut Chrome Dev Tools eine uncaught Exception im JS der Bing Maps. Allerdings hab ich auf die keinen Einfluss und viel wichtiger: Auf der betreffenden Seite ist keine Karte. Die anderen Skripts werden geladen und mein eigener Code zeigt keine Fehler. Nur dass jQuery hier anscheinend 2x geladen wird (hä?), finde ich seltsam: Quellcode: http://pastebin.org/313356//Andererseits werden alle Skripts 2x geladen... Hm.
|
Rektal
Here to stay
|
Würde ich zuerst mal fixen, hatte ich letzte Woche auch: 2 Mal geladen, nix ging.
|
prayerslayer
Oar. Mh.
|
Okay. Tut mir leid, dass ich mich so blöd anstelle, aber was kann der Grund dafür sein, dass Skripts 2x geladen werden? Den Header, der in jeder Seite eingebunden wird, gibt es nur einmal und dort stehen die JS Sachen offensichtlich auch nur 1x drin. //Jedenfalls scheint das wirklich das Problem zu sein, auf allen anderen Seiten werden Skripts 2x geladen.
Bearbeitet von prayerslayer am 07.06.2010, 01:05
|
Rektal
Here to stay
|
Uhm .. kenne die Chrome Dev-Tools nicht ... musst analysieren wie es dazu kommt; wenn du es nicht offensichtlich als 2. URL wo stehen hast wird es ev. über einen JS code dynamisch geladen. Firebug Netview und ev. Fiddler2 ftw.
|
kleinerChemiker
Here to stay
|
einfach mal versuchen die Zeile auszukommentieren, wo das Skript "normal" geladen wird und schaun, ob es dann nur einmal oder gar nicht geladen wird
|
prayerslayer
Oar. Mh.
|
Stand der Dinge: Die Netzwerkansicht von Firebug sagt, dass auf der Startseite die Skripte normal 1x geladen werden. Danach aber gar nicht mehr. Auskommentieren der <script> Tags im Header bewirkt, dass die Skripts nicht mehr geladen werden.
Ich hab im Moment ja das ModelAndView Objekt und die Controller des Spring Frameworks in Verdacht, dass die irgendwas cachen/speichern und so erneutes Laden verhindern.
|
Rektal
Here to stay
|
wtf Na hey, ich drück die Daumen .. würde das "solved" vielleicht weg nehmen, und keep us updated
|
prayerslayer
Oar. Mh.
|
Update: Liegt nicht dran, dass Scripts 2x geladen werden - jQuery Datepicker läuft. Was ich herausgefunden habe: $(document).ready() wird auf jeder Seite aufgerufen, die eine Bing Map enthält, bei anderen nicht WTF! //Habe document.ready abgeändert und frage auf null ab - schätz dass es deswegen auf Seiten ohne Map nicht funktioniert hat. http://pastebin.org/315437Nur jetzt kommt gar kein alert mehr. Nie. Karten und Datepicker funktionieren aber
Bearbeitet von prayerslayer am 07.06.2010, 13:57
|
Rektal
Here to stay
|
Ok, was anderes; nicht unbedingt die beste Lösung aber: wir hatten X-Browser auch nicht gerade gute Erfahrungen mit document.ready() gemacht und im Endeffekt es so umgebaut, das das <script> mit der Initialisierung am Ende, nach dem letzten DOM-Element (vor </body> steht; ohne zusätzliche on<irgendwas> event listening. Am dem Zeitpunkt waren das Behavior über alle Browser wirklich das selbe. HTH ... wobei, unser Target ist auch IE6 *gulp* gewesen, YMMV. Btw, kannst nicht die Live-URL posten? Wäre einfacher
Bearbeitet von Rektal am 07.06.2010, 14:16
|
prayerslayer
Oar. Mh.
|
Ein Skript vor </body> gefällt mir nicht so, weil ich dann ein include in jede JSP bauen muss. Behalte ich aber als Notlösung im Hinterkopf, danke Live-URL is leider blöd, weil das Ding gar nie wirklich online gehen soll läufts halt nur lokal Und ich hab keine Lust mir einen free Webspace mit Tomcat zu suchen... Was anderes: Manchmal funktioniert die Karte aus heiterem Himmel nicht, weil laut Dev Tools "GetMap not defined" ist. Die steht aber 1 Skript drüber, sieht man eh im ersten pastebin-Link, und war sonst auch immer da. An der Reihenfolge der Skripts habe ich nichts geändert, Working Directory gecleaned etc. hab ich auch. Absichtlich hab ich sie dann nicht mehr zum Laufen gebracht.
Bearbeitet von prayerslayer am 07.06.2010, 14:24
|