Передача переменной между PHP и JS в одном и том же HTML

Я читаю данные из MySQL, используя PHP. Затем я пытаюсь передать эти данные в JS ниже в том же HTML, используя его на картах OpenLayer. Я пробовал различные методы, включая json_encode, но не могу передать действительные данные. Когда я устанавливаю данные вручную в JS, все работает нормально. Что я делаю не так с кодом? Есть ли предпочтительный метод?

<html lang = "en">

.карта { маржа: 0; заполнение: 0; высота: 100%; ширина: 100%; } Отслеживание пользователей OnTRack

<?php
// ... Other database code removed for example...
$rowlon = 151.215324;
$rowlat = -33.856733;
?>

<div id = "map" class = "map"></div>
<script type = "text/javascript">
    // var latestlon = <?php echo $rowlon; ?>;
    // var latestlat = <?php echo $rowlat; ?>;
    var latestlon = "<?php echo json_encode($rowlon) ?>";
    var latestlat = "<?php echo json_encode($rowlat) ?>";
    // var latestlon = 151.215324;
    // var latestlat = -33.856733;
    var mycoords = [latestlon, latestlat];
    var map = new ol.Map({
        target: 'map',
        layers: [
            new ol.layer.Tile({
            source: new ol.source.OSM()
            })
        ],
    view: new ol.View({
      center: ol.proj.fromLonLat(mycoords),
      zoom: 12
    })
  });
</script>

Почему вы используете json_encode? Это возвращает строковый объект, совсем не похожий на вашу прокомментированную строку ниже. Вы всегда можете просмотреть исходный код HTML и посмотреть, что делает ваш код.

Andreas 27.02.2019 05:42

1. Удалите двойные кавычки при использовании эха, особенно если вы хотите сохранить тип переменной (модуль может ожидать числовой тип вместо строки) 2. Нет необходимости использовать json_encode, так как значение не в формате массива.

Nikhil 27.02.2019 06:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
263
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

var latestlon = <?=$rowlon?>;
var latestlat = <?=$rowlat?>;

Здесь не нужны двойные кавычки и особенно json_*

Если это не работает, возможно, вы делаете что-то другое неправильно, проверьте консоль браузера на наличие ошибок.

Не используйте короткие теги. Они не всегда поддерживаются.

Andreas 27.02.2019 05:44

Короткие открытые теги @Andreas всегда доступны, начиная с php5.4 (выпущено 7 лет назад): php.net/manual/en/ini.core.php#ini.short-open-тег

Sanasol 27.02.2019 05:48

Все еще не работает... Код останавливается на этой строке и не переходит к отображению.

Chris King 27.02.2019 05:52

Люди все еще используют PHP 4. Буквально вчера я видел вопрос о PHP 4. А что можно отключить? Просто хочу, чтобы ваш ответ был полезен всем, а не только тем, у кого 5.4+ и с правильными настройками.

Andreas 27.02.2019 06:08

Ошибка консоли: «Uncaught SyntaxError: Unexpected token <» Это для любого из параметров, начинающихся с = <?

Chris King 27.02.2019 06:18

@ChrisKing проверьте исходный код своей страницы, у вас, вероятно, есть проблемы с данными, которые вы пытаетесь распечатать, поэтому вы получаете ошибку JS.

Sanasol 27.02.2019 06:25
Ответ принят как подходящий

Это может быть связано со следующими причинами

Причина - 1

 var latestlon = "<?php echo json_encode($rowlon) ?>"; // Type = String
 var latestlat = "<?php echo json_encode($rowlat) ?>"; // Type = String

Измените переменную JS на номер тип, удалив двойные кавычки.

 var latestlon = <?php echo json_encode($rowlon) ?>; // Type = Number
 var latestlat = <?php echo json_encode($rowlat) ?>; // Type = Number

Причина - 2

Пожалуйста, проверьте, используете ли вы расширение файла php

к вашему сведению: нет необходимости использовать json_encode, поскольку значение не является массивом.

Надеюсь, это поможет.

Большое спасибо. Причина 1 и 2. Самое главное, я не знал, что файл должен иметь расширение PHP, даже если он имеет базовый HTML-код. Спасибо всем за вклад от других!

Chris King 27.02.2019 08:06

Другие вопросы по теме