Google Map API v3 InfoWindow не открывается с помощью setContent из функции - PullRequest
0 голосов
/ 24 июня 2011

У меня есть простой код Google Map v3.Он создает карту и добавляет маркер в markerCluster.Все работает нормально, за исключением установки содержимого в информационное окно и его открытия.Функция getSupplierDetails() просто возвращает короткую строку (т.е. «Red Supply»).

Вот проблема: если я жестко закодирую текст «Red Supply» в строку setContent, например, infoWindow.setContent("Red Supply");, тогда информационное окнооткрывается нормально с содержимым.

Но если я оставлю все как есть, как в коде ниже, информационное окно вообще не откроется, хотя функция getSupplierDetails() возвращает "Red Supply".

* Функция 1010 * возвращает эту строку JSON: {"popupContent": "Red Suppplier"} из Firebug.

Потратил так долго на это без какого-либо решения.Любая помощь приветствуется.

Спасибо

var map;
var markerCluster;
var infoWindow;

$(document).ready(function() {

  if (mapElem != null) {
        var latlng = new google.maps.LatLng(54.664936, -2.706299);
        var myOptions = {
            zoom: 5,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
        };

        map = new google.maps.Map(mapElem, myOptions);
        markerCluster = new MarkerClusterer(map);
        infoWindow = new google.maps.InfoWindow();

    AddMarkers();
  }
});

function AddMarkers(){
    markerCluster.clearMarkers();
    var marker = new google.maps.marker({position:latLng, map:map, title:"title"});

    google.maps.event.addListener(marker, 'click', function() {
      var res = getSupplierDetails();
      infoWindow.setContent(res);
      infoWindow.open(map, this);
    });

    markers.push(marker);
    markerCluster.addMarkers(markers);
}


function getSupplierDetails() { //returns {"popupContent": "Red Suppplier"}
    $.ajax({
        type: 'POST',
        url: "sitedetail.aspx",
        dataType: 'json',
        timeout: 30000,
        success: function(data) {
            return data.popupContent;
        },
        error: function(xhr, textStatus, thrownError) {
            var resp = JSON.parse(xhr.responseText);
            alert(resp.message);

        }
    });
}

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

Успешный вызов ajax является асинхронным, поэтому вы получаете нулевое значение. То, что вы сделали, прекрасно (переместив SetContent в часть успеха), но вы также можете сделать это

google.maps.event.addListener(marker, 'click', function() {
  getSupplierDetails(function(res){
     infoWindow.setContent(res)
  });
  infoWindow.setContent(res);
  infoWindow.open(map, this);
});

function getSupplierDetails(callback) {
    $.ajax({
        type: 'POST',
        url: "sitedetail.aspx",
        dataType: 'json',
        timeout: 30000,
        success: function(data) {
            callback(data.popupContent);
        },
        error: function(xhr, textStatus, thrownError) {
            var resp = JSON.parse(xhr.responseText);
            alert(resp.message);

        }
    });
}
0 голосов
/ 24 июня 2011
function getSupplierDetails() { // returns "Red Suppplier" or ""
    var content = '';
    $.ajax({
        type: 'POST',
        url: "sitedetail.aspx",
        dataType: 'json',
        timeout: 30000,
        success: function(data) {
            content = data.popupContent;
        },
        error: function(xhr, textStatus, thrownError) {
            var resp = JSON.parse(xhr.responseText);
            alert(resp.message);

        }
    });
    return content;
}
...