Передача необязательного массива из PHP в jQuery

У меня проблема, если этот необязательный массив пуст:

<script>
    var parsedArray = JSON.parse('<?php echo json_encode($myArray); ?>');
    console.info(parsedArray );
</script>

Все в порядке, если массив НЕ пуст, но проблема возникает, если в массиве нет значений;

Uncaught SyntaxError: Unexpected token A in JSON at position 0

Console.log просто выводит Array, если массив пуст.

Я хочу узнать, как это делается правильно. Как передать пустой массив в jQuery, чтобы я мог запустить на нем функцию myArray.length, например, и чтобы он возвращал 0, если он пуст.

Как выглядит вход сгенерированный?

Nico Haase 23.03.2018 15:48

Обычно, если $myArray является пустым array(), json_encode должен возвращать [], поэтому я не уверен, откуда взялась синтаксическая ошибка. Как выглядит ответ от json_encode($myArray);, если он пустой, или, скорее, как выглядит $myArray?

empiric 23.03.2018 15:51

Просто выдает строку Array

lewis4u 23.03.2018 15:51
Поведение ключевого слова "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
3
61
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать тенарные операторы при выводе вашего $myArray. Если он пуст, вы можете просто передать null в JSON.parse, то есть:

var parsedArray = JSON.parse('<?php echo !empty($myArray) ? json_encode($myArray) : "null"; ?>');
console.info(parsedArray);

С ответом выше я бы также добавил ' в PHP:

var parsedArray = JSON.parse(<?php echo !empty($myArray) ? "'" . json_encode($myArray) . "'" : "null"; ?>);
console.info(parsedArray);

Потому что мы бы не использовали null как 'null'.

Вы можете проверить $myArray при его выводе и сделать что-нибудь, если он пуст. Что делать, зависит от того, как вы будете использовать послесловие parsedArray. Вы можете передать пустой массив []:

var parsedArray = JSON.parse('<?php echo !empty($myArray)? json_encode($myArray) : "[]"; ?>');
console.info(parsedArray);
Ответ принят как подходящий

Я думаю, что нет необходимости делать оператор if, я понял это, и моя проблема заключалась в том, что я сделал json_encode ($ myArray) в PHP-коде, а затем JSON.parse в javascript

так работает без проблем:

в PHP просто объявите массив

$myArray = [];

а в php файле под скриптом выплюнуть вот так:

var myArray = <?= json_encode($myArray) ?>;

И теперь, даже если массив пуст, он будет выплевывать [];

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