RobRobson: google.maps popups mit Ajax füllen

Hallo,

ich lade ein  gmaps karte mit einigen locatoren. Diese fülle ichschon beim erstellen mit den benötigten infos.
Schöner wäre es wenn bei click auf den marker erst via Ajax die info geholt wird. Gesagt getan:

  
geocoder.getLatLng(my_location , function(point) {  
  var locPoint$i = new GLatLng('$row[longitude]','$row[latitude]',false);  
  var icon1 = new GIcon(G_DEFAULT_ICON);  
  icon1.image = \"grafix/bm2.png\";  
  markerOptions = { icon:icon1 };  
  var Loc$i = new GMarker(locPoint$i,markerOptions);  
  map.addOverlay(Loc$i);  
GEvent.addListener(Loc$i, 'click', function() { Loc$i.openInfoWindowHtml(GetLocInfo($row[id])); }) });  
})";  

die dazugehörige Funktion:

  
function GetLocInfo(id)  {  
   $.post('ajax/ajax_get.php',{id:id,get_type:\"popupinfos\"},function(content){ alert(content); });  
return content;  
}  

Das Testweise verbaute alert() bringt mir genau die Infos die ich haben will, leider kommen Infos in der popup openInfoWindowHtml() nicht an. Es wird immer nur [window Object] ausgegeben.

Ich vermute an dem punkt wo "return content;" kommt  ist der inhalt noch nicht vertfügbar, da er noch vom server geladen wird. aber: function(content) { return content; } bringt auch nichts.

Wie ist es richtig?

Danke und viele Grüße,
Rob

  1. Wie ist es richtig?

    Danke und viele Grüße,
    Rob

    Ich weiß ja das ich blöde Fragen stelle, aber fällt dem keinem was ein? Mir sind die Ideen ausgegangen.

    Viele Grüße,
    Rob

    1. OK, ich hab wieder ne Idee.

      Ich bekomme ja keine Strings oder so zurück, sondern eine resource. Ich versuche grade das mit der jquery Funktion .html() zu verwenden. Noch mit mäßigem Erfolg. Na mal weitersehen.

      Viele Grüße,
      Rob

  2. Hallo RobRobson,

    ich vermute, dein Problem liegt in der Asynchronität des Requestes. Die Funktion, die den Request absetzt, kann die Antwort noch nicht kennen. Du musst daher deine Logik umdrehen:

    Du setzt nach dem Klick einen asynchronen Request ab, in dessen Callback-Funktion dann das Infofenster geöffnet und befüllt wird.

    Gruß, Jürgen

    1. Gute Idee,

      ich vermute, dein Problem liegt in der Asynchronität des Requestes.

      werd ich heut abend mal probieren, Danke.

      Viele Grüße,
      Rob

    2. Hi und Danke nochmal!

      erster Anlauf und hat gleich geklappt. :D

      Du setzt nach dem Klick einen asynchronen Request ab, in dessen Callback-Funktion dann das Infofenster geöffnet und befüllt wird.

      Der Vollständigkeit halber:

      Habe die Zeile:
      GEvent.addListener(Loc$i, 'click', function() { Loc$i.openInfoWindowHtml(GetLocInfo($row[id])); });
      geändert in:

      GEvent.addListener(Loc$i, 'click', function() { GetLocInfo($row[id],Loc$i); });

      übergebe also der nachfolgenden Funktion das Objekt auf das die Ändung angewendet werden muss.
      und die Function wendet es dann auch an:

        
      function GetLocInfo(id,location) {  
         $.post('ajax/ajax_get.php',{id:id,get_type:\"popupinfos\"},function(content){ location.openInfoWindowHtml(content);});  
      }  
      
      

      Viele Grüße,
      Rob