Почему JSON.parse() не получит мне информацию из строки json в этом случае?

#javascript #php #json

#javascript #php #json

Вопрос:

У меня есть строка в формате json, и я хотел бы выбрать определенный элемент внутри нее и вывести его на экран с помощью .innerHTML .

У меня есть строка с именем myData, которая отформатирована как JSON.

Строка берется из базы данных MySQL с использованием PHP.

Чтобы получить их, я использую это:

Я извлекаю элементы и кодирую массив в строку в формате json

             $faqs = $traerFaqs->fetchAll(PDO::FETCH_ASSOC);     
            $stringFaqs = json_encode($faqs);       
  

А затем я помещаю ее в элемент, доступный для DOM, но скрытый от просмотра:

             echo '<div id="hiloFaqs" style="display: none;">';
            echo $stringFaqs;
            echo '</div>';
            ?>
  

Это строка, которую я получаю:

 [
{"faqID":"1","tituloFaq":"Como accedo al material del Curso?","cuerpoFaq":"
Lorem ipsum dolor sit amet.</p>"
},
{"faqID":"2","tituloFaq":"Como cancelo los pagos del Curso?","cuerpoFaq":"
At vero eos et accusam et justo duo.</p>"
},
{"faqID":"3","tituloFaq":"Que documentacinn debo entregar?","cuerpoFaq":"
Stet clita kasd gubergren, no sea takimata sanctus.</p>"
},
{
"faqID":"4","tituloFaq":"Por que estoy suspendido?","cuerpoFaq":"
Sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>"
},{
"faqID":"5","tituloFaq":"Por que estoy pendiente?","cuerpoFaq":"
Kasd gubergren, no sea takimata sanctus est.</p>"
}
]
  

Теперь я пытаюсь получить определенный элемент и по какой-то причине не могу.
Я новичок в JS, так что, возможно, я забыл здесь что-то очень глупое:

 var faqs = document.getElementById("hiloFaqs");
var myData = faqs.textContent;
faq = JSON.parse(myData);
$('#output').append(faq[0]['tituloFaq']);
  

У меня есть выходные данные в моем html-файле, например, так: <span id="output"></span> , но ничего не распечатывается.

Не faq[0]['tituloFaq'] должен ли я получить Como accedo al material del Curso?выводится?

Чего мне не хватает?

Комментарии:

1. Почему вы повторяете это в html? Также htmlspecialchars($stringFaqs); собирается изменить его, чтобы символы больше не составляли допустимую строку json

2. Было бы проще просто повторить его в теге script, как реальный объект javascript?

3. как это сделать?

4. <script>var faqs = <?php echo json_encode($faqs); ?></script>

5. Теперь я понимаю, что вы имеете в виду. Нет, я хочу только некоторые вещи внутри строки json.

Ответ №1:

Во-первых, нет необходимости захватывать JSON из скрытого текстового узла. Вместо этого сразу назначьте ее встроенной как глобальную переменную javascript.

 <script>
var MY_DATA = JSON.parse(<?=$stringFaqs;?>);
// or
var MY_DATA = JSON.parse(<?php echo $stringFaqs; ?>);
</script>
  

Попробуйте.

Комментарии:

1. снимите JSON.parse , если вы напечатаете возвращаемое значение из json_encode , вы уже получите действительное значение javascript. В противном случае у вас будет что-то вроде JSON.parse({}) , которое выдаст недопустимую ошибку токена

2. Вы не должны иметь JSON.parse ни в одном примере. Строка уже является JavaScript, вы можете просто поместить ее на страницу и JSON.parse она умрет, потому что вы передаете ей массив JavaScript, а не строку.

3. dyn-web.com/tutorials/php-js/json/array.php Прокрутите вниз. Вы хотите использовать JSON.parse по причинам кодирования. «Хотя не всегда необходимо запускать результаты json_encode через анализатор на стороне JavaScript, вы, как правило, захотите это сделать»