Все еще пытаюсь передать массив PHP в функцию JQuery внутри цикла foreach (в модал Bootstrap3)

У меня есть страница php с циклом foreach. Я выяснил, как правильно передать одну переменную в цикле в функцию JQuery и заставить ее работать. Я работаю в Bootstrap3 и передаю переменную в модальное окно. Теперь я хочу сделать это через массив, и я в тупике. Я искал интернет и этот сайт, и я думаю, что я на правильном пути, но я что-то упускаю.

PHP и HTML:

 <?php
    $mapinfo = array(
        "pos" => $parkrow['pos'],
        "name" => $parkrow['name'],
        "address" => $parkrow['address'],
        "city" => $parkrow['city'],
        "state" => $parkrow['state'],
        "zip" => $parkrow['zip']
    );
?>

Паркроу уже определился...

<a href="#myModal" role="button" data-toggle="modal" data-target="#myModal" data-whatever="<?php echo json_encode($mapinfo, JSON_PRETTY_PRINT) ?>"><img src="images/locmaps/<?php echo $parkrow['parkid']; ?>.jpg" alt="map to <?php echo $parkrow['parkid'] ?>" class="img-responsive"></a>

В приведенной выше ссылке я беру PHP Array $mapinfo, кодирую его и отправляю по ссылке. Это работало (за исключением кодирования) с одной переменной PHP, но не работает с массивом.

JQuery:

$('#myModal').on('show.bs.modal', function (event) {


  var button = $(event.relatedTarget);
  var mapinfo = button.data('whatever');

  alert(mapinfo.name);  ...

Я пытался выполнить кодирование в Jquery, я пытался поместить скрипт в href (я уверен, что это плохая идея). Я попытался закодировать его в php-файле и присвоить его собственной переменной PHP и передать его. Я полностью в тупике.

Я не хочу делать AJAX-запрос, если это вообще возможно - накладные расходы на это уже очень высоки, и добавление к нему, вероятно, будет проблемой.

Разговор ниже, казалось, решил проблему, но когда я проверил ее должным образом, я все равно получил информацию только от последнего элемента в цикле, независимо от того, какую кнопку я нажал. Например, если я нажал кнопку "посмотреть карту" для третьего парка, я получил карту для последнего парка. Я все еще в тупике.

2 ответа

Решение
<?php
    $mapinfo = array(
        "pos" => $parkrow['pos'],
        "name" => $parkrow['name'],
        "address" => $parkrow['address'],
        "city" => $parkrow['city'],
        "state" => $parkrow['state'],
        "zip" => $parkrow['zip']
    );
?>

и твоя кнопка (не пиши data-whatever Вот)

<a href="#myModal" role="button" data-toggle="modal" data-target="#myModal" <img src="images/locmaps/<?php echo $parkrow['parkid']; ?>.jpg" alt="map to <?php echo $parkrow['parkid'] ?>" class="img-responsive"></a>

И вместо того, чтобы писать код ниже в вашем файле JS, запишите его в файл PHP.

<script>
var myData = <?php echo json_encode($mapinfo) ?>;
$('#myModal').on('show.bs.modal', function (event) {


 var button = $(event.relatedTarget);
 var mapinfo = myData;

 alert(mapinfo.name);  ..

Может быть, вам нужны одиночные кавычки вокруг этого '<?php echo json_encode($mapinfo) ?>'

Вы не можете смешивать php с файлом.js, как с обычным файлом.php, поскольку файл.js не обрабатывается механизмом.php так, как ваши файлы.php.

Наиболее типичный способ сделать это - включая php в js-файле - это просто включить встроенный JS (материал между тегами) в ваш.php-файл. Тогда все будет работать как положено. Поэтому, если вы используете js или php в одном файле, то в файле.php это невозможно в файле.js.

попробуйте это вы можете решить вашу проблему

`

   <?php
    $mapinfo = array(
        "pos" => $parkrow['pos'],
        "name" => $parkrow['name'],
        "address" => $parkrow['address'],
        "city" => $parkrow['city'],
        "state" => $parkrow['state'],
        "zip" => $parkrow['zip']
    );
?>

твой паркроу определен...

<a href="#myModal" role="button" data-toggle="modal" data-target="#myModal" data-whatever="<?php echo json_encode($mapinfo, JSON_PRETTY_PRINT) ?>"><img src="images/locmaps/<?php echo $parkrow['parkid']; ?>.jpg" alt="map to <?php echo $parkrow['parkid'] ?>" class="img-responsive"></a>

затем напишите код jquery в php файл, используя тег

      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<script>
            var myData = <?php echo json_encode($mapinfo) ?>;
            $('#myModal').on('show.bs.modal', function (event) {


             var button = $(event.relatedTarget);
             var mapinfo = myData;

             alert(mapinfo.name);  ..
});
             </script>
Другие вопросы по тегам