Все еще пытаюсь передать массив 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>