Использование переменной внутри другой - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь передать значение через PHP в функцию Javascript, но оно не работает, значение, похоже, не проходит.Когда я заменяю переменную статическим текстом, она работает нормально.

Я вызываю функцию через файл PHP примерно так ...

<?php
if (!empty($data['geocode'])) {
    echo '<body onload="initializeGM(\'' . $data['geocode'] . '\');">';
} else {
    echo '<body>';
}
?>

$data['geocode'] содержит оба значения lat и lng в виде строки.

Вот код Javascript ..

function initializeGM(geocode) {
  var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(geocode),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

Я добавил alert(geocode) в функцию JS для проверки, и она отлично работает.

Как я могу сделать так, чтобы я мог передать переменную geocode, и она работает?

Ответы [ 2 ]

3 голосов
/ 24 января 2012

Если я правильно понял ваш вопрос, geocode - это переменная PHP, и вы хотите передать ее в вызов функции JavaScript.Если это так, вам нужно echo вывести значение переменной PHP:

new google.maps.LatLng(<?php echo($geocode); ?>);

Однако , обратите внимание, что конструктор LatLng ожидает2 аргумента типа Number (и необязательный логический аргумент), и вы пытаетесь передать только один аргумент.Хотя, возможно, я совершенно неправильно понял ваши намерения.

Редактировать (см. Комментарии)

Я не заметил, что вы передаете geocode в качестве аргумента initializeGM функция.Если вы на самом деле пытались передать переменную PHP в эту функцию, вам нужно изменить вызов функции JavaScript, чтобы использовать переменную PHP:

initializeGM(<?php echo($geocode); ?>);

Приведенный выше абзац «однако» по-прежнему применим.Ваш код может выдать ошибку, так как lng будет undefined в функции конструктора LatLng.

Отредактируйте снова (см. Отредактированный вопрос)

То, что у вас есть, на первый взгляд кажется, что это должно привести к чему-то вроде этого (как вы сказали, что geocode содержит строку):

<body onload="initializeGM('somelat,somelng');">

В теории нет ничего плохого (строка будет передана в initializeGM), но проблема в том, что функция ожидает два аргумента типа Number, а не один аргумент типа String:

<body onload="initializeGM(100, 200);"> <!--Use real lat-lng values here!-->

Это потребует изменения функции JavaScript:

function initializeGM(lat, lng) { //2 arguments
    var myOptions = {
        zoom: 8,
        center: new google.maps.LatLng(lat, lng), //Pass 2 arguments to constructor
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
1 голос
/ 24 января 2012

Конструктор google.maps.LatLng принимает минимум два аргумента, lat:number и lng:number.Вы только передаете один.

Предполагая, что $data['geocode'] выглядит примерно как 1.234,5.678, попробуйте это ...

  1. Измените свою функцию JS на

    function initializeGM(lat, lng) {
      var myOptions = {
        zoom: 8,
        center: new google.maps.LatLng(lat, lng),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }
      var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    }
    
  2. Изменить вызов на

    <?php if (!empty($data['geocode'])) :
    $coords = explode(',', $data['geocode']);
    ?>
    <body onload="initializeGM(<?php printf('%.15f, %.15f', $coords[0], $coords[1]) ?>)">
    <?php else : ?>
    <body>
    <?php endif ?>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...