Невозможно отобразить переменную php в javascript

У меня есть переменная PHP, которая содержит объект JSON в строковом формате.

<?php
$url = "http://ip-api.com/json";
$phpObj = file_get_contents($url);
?>

Javascript:

<script>
var obj = "<?php echo $phpObj; ?>";
</script>

Когда я пытаюсь отобразить переменную PHP в javascript, я получаю следующую ошибку:

Uncaught SyntaxError: Invalid or unexpected token.

Я пробовал использовать json_encode, но он выдает ту же ошибку.

Можете ли вы при рендеринге страницы «просмотреть исходный код» и вставить его сюда?

XTOTHEL 26.10.2018 06:42

Прежде всего откажитесь от котировок var obj = <?php echo $phpObj; ?>; это строка в PHP, но в JS вам нужен var obj = {foo:bar};, а не var obj = "{foo:bar}";

ArtisticPhoenix 26.10.2018 06:54

Можем ли мы увидеть образцы данных? Нам нужно точно знать, как могут отличаться входные данные.

mickmackusa 26.10.2018 06:55

ответ на запрос может возвращать данные json или массив по file_get_contents, попробуйте var obj = JSON.parse ("<? php echo json_encode ($ phpObj)?>"); надеюсь помочь вам

Haidangdevhaui 26.10.2018 06:56
2
4
544
2

Ответы 2

Нет необходимости использовать кавычки ("s) и json_encode, поскольку это уже объект JSON. Пытаться

var obj = <?php echo $phpObj; ?>;

Когда я получаю данные и пытаюсь -

<?php
$phpObj = file_get_contents("http://ip-api.com/json");
?>

<script>
var obj = <?php echo $phpObj; ?>;
console.log(obj);
</script>

Я получаю -

{as: "AS45194 Syscon Infoway Pvt. Ltd.", city: "Thane", country: "India", countryCode: "IN", isp: "Syscon Infoway Pvt.", …}

в консоли.

Я удалил цитаты и попробовал. Но когда я просматриваю исходный код, он дает мне: var obj = <br /> «Uncaught SyntaxError: Unexpected token <»

curiousloser 26.10.2018 06:50

Можете ли вы добавить контент, который вы получаете в $phpObj?

Sougata Bose 26.10.2018 06:52

@Teemu тоже работает без кавычек. Также, если кавычки требовали, в этом случае их нужно экранировать.

Sougata Bose 26.10.2018 06:53

@Sougata В JSON используются двойные кавычки, так что вы должны заключить его в одинарные кавычки, не так ли?

mickmackusa 26.10.2018 06:54
ip-api.com/json содержит строку JSON. Возможно, OP получает другой контент. Так что сначала нам нужно это подтвердить.
Sougata Bose 26.10.2018 06:56

В моем Webroot указано, что ссылка «Высокий риск». «Обнаруженный вредоносный сайт»

mickmackusa 26.10.2018 06:56

@mickmackusa видит источник после посещения этого URL. Его простой JSON.

Sougata Bose 26.10.2018 06:57

... Подожду, пока ОП обновит вопрос входными данными.

mickmackusa 26.10.2018 06:58

Многие ошибки PHP начинаются с <br />Например Я предполагаю, что в вашем коде есть какое-то уведомление или предупреждение, генерирующее вывод.

ArtisticPhoenix 26.10.2018 06:58

$ phpObj содержит данные, похожие на: {"key1": "value1", "key2": "value2", "key3": "value3"}. Невозможно опубликовать фактические значения, поскольку они содержат информацию о местоположении.

curiousloser 26.10.2018 07:01

Тогда я думаю, мы не сможем решить, потому что ваш вопрос неясен / не может быть воспроизведен.

mickmackusa 26.10.2018 07:03

У меня отлично работает без кавычек. Обновление с полным кодом.

Sougata Bose 26.10.2018 07:04

Итак, можем ли мы с уверенностью предположить, что у OP есть что-то еще, что мешает процессу?

mickmackusa 26.10.2018 07:04

Передача простых массивов или массивов объектов между PHP и JavaScript может осуществляться через json_encode и json_decode соответственно. Например, в вашем случае я могу сделать следующее

<?php
  $url = "http://ip-api.com/json";
  $phpObj = file_get_contents($url);
?>
 <script>
  var obj = <?php echo $phpObj; ?>;
 </script>

Поскольку данные получены в формате JSON.

Однако это полностью зависит от вашего приложения. Если $phpObj = file_get_contents($url); вернет json, я просто сделаю следующее

<script>
  var obj = <?php echo $phpObj; ?>;
 </script>

Если это возвращаемый объект ($phpObj), то я, прежде всего, конвертирую объект в массив, затем проанализирую его в формате JSON, а затем переведу его в JavaScript, как показано ниже.

<script>
  var obj = <?php echo json_encode((array)$phpObj); ?>;
 </script>

Если это массив, который возвращается, я проанализирую переменную в формате JSON, а затем выведу ее на JavaScript, как показано ниже.

<script>
  var obj = <?php echo json_encode($phpObj); ?>;
 </script>

В случае json_decode, если, например, вы хотите использовать значение, возвращаемое file_get_contents($url);, и предполагая, что это возвращает JSON, вы можете преобразовать JSON в массив PHP или объект PHP, как показано ниже,

$data_obj = json_decode($phpObj); //Return object not array
$data_arr = json_decode($phpObj,true); //Return array not object

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