#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);
собирается изменить его, чтобы символы больше не составляли допустимую строку json2. Было бы проще просто повторить его в теге 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, вы, как правило, захотите это сделать»