JSON Datensätze darstellen.

Hallo Sven,

zuerst einmal danke !!
ich werde mal versuchen, ob ich damit klar komme.

Ich hatte heute mal an der Wetter Geschichte gesessen. Da es den Wetterbericht ja auch als XML gibt, habe ich mal probiert, ob ich eine Function bauen kann, mit der ich die Daten auslese und dann an geeigneter Stelle verwenden kann.


Ich habe das so konstruiert, das ich die Function mit

getwetter(lat,lng); aufrufe.

ich würde die Function gern an dieser Stelle einbinden (vor sidebar_html), da hier die Schleife für jedes Sidebarfeld durchlaufen wird. -

Code:
 sidebar_html += '<div id="' + linkid + '" style="margin-left: 4px; margin-top: 4px;"><a href="javascript:myclick(\'' + i + '\')"><img src="http://client.wohnraum24.eu/components/com_wohnraum24/img/thb/'+ thumb +'"  alt="Ansicht Foto" border="0"/><br><h2>' + name + '</h2></a><ul><li>'+ category +'</li><li>L&auml;ngengrad: '+ lat +'</li><li>Breitengrad: '+ lng +'</li></ul></div>'; 
        }

Gesagt, getan, aber irgendwas mache ich immer noch falsch. Ich bekomme einfach keine Daten, obwohl der reine Aufruf der URL keine Probleme macht und mir die xml Datei sendet (mit den gewünschten Koodinaten) nur wenn ich es mit der function aufrufe, dann bleibt die Karte leer und nichts wird mehr angezeigt.

Mein Gedanke war gewesen, das ich nach dem Aufruf der Function die variablen in den sidebar_html Code einfüge, also z.B. <li>Temperatur: '+ grad +'</li><li>Wolkenbildung: '+ clouds +'</li> u.s.w.

Hier ist der Code, mit dem ich mir den Inhalt der URL (Wetterdaten) hole..
Code:
function getwetter(lat,lng)
{
	var request = GXmlHttp.create();
	
       
	//Diese Zeile muss ergänzt werden, wenn eine Suchoption dazu eingefügt wird (oder eben reduzieren)!!
       var url = 'http://ws.geonames.org/findNearByWeatherXML?lat='+lat+'&lng='+lng';
       
	request.open("GET", url, true);
	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			try
		       {
			var xmlResults = request.responseXML.documentElement;
        
							
				
		var observation = xmlResults.getElementsByTagName('observation').item(i).firstChild.data;
          	var obtime = xmlResults.getElementsByTagName('observationTime').item(i).firstChild.data;
		var station = xmlResults.getElementsByTagName('stationName').item(i).firstChild.data;
		var icao = xmlResults.getElementsByTagName('ICAO').item(i).firstChild.data;
		var landcode = xmlResults.getElementsByTagName('countryCode').item(i).firstChild.data;
		var hoehe = xmlResults.getElementsByTagName('elevation').item(i).firstChild.data;
		var laenge = xmlResults.getElementsByTagName('lat').item(i).firstChild.data;
		var breite = xmlResults.getElementsByTagName('lng').item(i).firstChild.data;
          	var grad = xmlResults.getElementsByTagName('temperature').item(i).firstChild.data;
          	var messpunkt = xmlResults.getElementsByTagName('dewPoint').item(i).firstChild.data;
          	var gefuehl = xmlResults.getElementsByTagName('humidity').item(i).firstChild.data;
		var wolken = xmlResults.getElementsByTagName('clouds').item(i).firstChild.data;
		var condition = xmlResults.getElementsByTagName('weatherCondition').item(i).firstChild.data;
          	var hektopascal = xmlResults.getElementsByTagName('hectoPascAltimeter').item(i).firstChild.data;
          	var windrichtung = xmlResults.getElementsByTagName('windDirection').item(i).firstChild.data;
          	var windspeed = xmlResults.getElementsByTagName('windSpeed').item(i).firstChild.data;
         		}
		}
	}
	request.send(null);
}

Aber wie gesagt, es will einfach nicht funktionieren. Was mache ich falsch

Liebe Grüße
Sven
 
Hallo Sven,

uff, das war jetzt frustrierend... :eek:

damit habe ich gestern den ganzen Tag verbracht. Hmm, ich dünne jetzt nochmal aus und bleibe nochmal beim Wetter. Ich habe mir eine neue Konstruktion zusammen gebaut, leider mache ich wieder etwas nicht richtig. Ich bekomme einfach den Zusammenhang zwischen ankommen und zuordnen nicht hin.

Hier noch mal ein Ansatz..

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF=8"/>
    <title>Google Maps JavaScript API Example - Geonames WebServices</title>
 
    <script src="http://www.json.org/json2.js" type="text/javascript"></script>

    <script type="text/javascript">
    //<![CDATA[
    function ladewetter() {

          var selectedWebService = "findNearByWeather"
          var script = document.createElement('script');
          document.body.appendChild(script);

// Für Test mal feste Werte eingegeben, wird später durch +lat+ / +lng+ ersetzt.
          script.src = 'http://ws.geonames.org/findNearByWeatherJSON?lang=de&lat=52.3666666666667&lng=13.5166666666667&callback=loadJSON';
          //document.getElementById('result').innerHTML = script.src;
                     }

       function loadJSON(result) {

       // wenn ich nachfolgende Zeile aktiviere, kommt JSON richtig an
       // wenn ich hier versuche, vor der Ausgabe umzuwandeln, dann stelle ich mich
       // zu blöd an und verstehe es immer noch nicht.
       // Werde nach einem Gebrauchthirn mit Einstein IQ Ausschau halten müssen..
       //document.getElementById('ausgabe').innerHTML = JSON.stringify(result);
       eval('objekt='+result);
       test=('Wetterstation ' +  objekt.weatherObservation.stationName + ' meldet am ' + objekt.weatherObservation.datetime + ' Uhr\nWolkenbildung: ' +  objekt.weatherObservation.clouds + ' · Temperatur: ' + objekt.weatherObservation.temperature + ' Grad Celsius\nWindgeschwindigkeit: ' + objekt.weatherObservation.windSpeed + ' Knoten');

       // Und hier dachte ich - nu isses gewandelt - geh und zeig an 
       // Aber so wie es aussieht - ist Newton gegen mich ein Waisenknabe ;-)
       //document.getElementById('ausgabe').innerHTML = JSON.stringify(test);
       // Und da verließen Sie Ihn und machte sich auf, um erneut im Forum zu jammern..

                               }
    //]]>
    </script>
  </head>
<body onload="ladewetter()">  
<br><center>
    <div id="ausgabe" style="width:500px; background-color: #cccc00; overflow: scroll; font-family: Courier">
</center>
  </body>
</html>
 
uff, das war jetzt frustrierend... :eek:

Naja, es gibt Schlimmeres, womit man den Sonntag verbringen kann :)

Die Lösung ist recht simpel, geonames.org erzeugt bereits ein Objekt, du musst dies also nicht per eval tun:
Code:
function loadJSON(result) {
      objekt=result;
      test=('Wetterstation ' +  objekt.weatherObservation.stationName + ' meldet am ' + objekt.weatherObservation.datetime + ' Uhr\nWolkenbildung: ' +  objekt.weatherObservation.clouds + ' · Temperatur: ' + objekt.weatherObservation.temperature + ' Grad Celsius\nWindgeschwindigkeit: ' + objekt.weatherObservation.windSpeed + ' Knoten');
      document.getElementById('ausgabe').innerHTML = test;
      }
 
Jo,
das wars - jetzt bekomme ich die Daten so, wie ich es mir gedacht hatte. Kleiner Makel ist noch in der Ausgabe - am Anfang und Ende der Ausgabe werden noch Anführungszeichen ausgegeben. Aber im wesentlichen ist das Problem damit erfolgreich gelöst.

Ich möchte mich nochmal bei dir bedanken, Sven..

Liebe Grüße
der andere Sven
 
Zurück