JavaScript, передавая значение со скрытым полем - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть страница, которая самостоятельно перезагружается каждые x секунд с тегом

<meta http-equiv="refresh" content="60"/>

.На странице есть карта Google, и мне нужно запомнить уровень масштабирования (и центр) между обновлениями.

Вот что у меня есть:

function initialize() {

    // initialize the map
    var latlng = new google.maps.LatLng(0, 0);
    var myOptions = {
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    myMarkers = new Array();    
    updateMarkers();


    cen = new google.maps.LatLng(-12.461334, 130.841904);
    map.setCenter(cen);
    zoomLevel = document.getElementById("zoomLevel").value;
    map.setZoom(parseInt(zoomLevel));
    google.maps.event.addListener(map, 'zoom_changed', function() {
        str = map.getZoom() + '';
        document.getElementById("zoomLevel").value = str;
    });
  }

Итак, у меня есть прослушиватель событий, который будет обновлять скрытое значение zoomLevel после каждого изменения масштаба.При каждой перезагрузке уровень масштабирования должен быть считан из этого значения.

<input type="hidden" name="zoomLevel" id="zoomLevel" value="4" />

Но после каждого обновления уровень масштабирования устанавливается на 4. Что я делаю неправильно?

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Мета-обновление - это не постбэк, а фактический чистый запрос страницы. У вас есть 2 способа это исправить:

  1. Во-первых, перестаньте обновляться, это ужасное решение, которое вы придумали. Используйте ajax, чтобы запросить новую карту и перезаписать старую на месте.
  2. Хуже, но поддерживает ваш странный стиль: используйте setTimeout вместо этого и наберите form.submit (или создайте ссылку __doPostBack, если вы используете asp.net). Таким образом, вы делаете фактический почтовый запрос.
0 голосов
/ 15 декабря 2010

Может быть, вы можете использовать куки, чтобы запомнить состояние вашей страницы.

0 голосов
/ 15 декабря 2010

Я считаю, что решение у вас под рукой. На самом деле вам не нужно постбэк вообще. Просто запланируйте функцию initialize (), которая будет вызываться каждые 60 секунд. Итак -

  1. Удалить мета-тег автообновления;
  2. Добавить строку примерно так: setInterval (initialize, 60000); на странице стартовый код

Вот, пожалуйста.

...