Как вставить php-массив с innerHTML в javascript

Я хотел бы иметь возможность вставлять html-код из javascript, который вставляет php-код, содержащий массив. Что я делаю, так это получаю в переменной $ Teams массив команд. И затем я просматриваю массив с помощью foreach, чтобы установить значения в параметрах выбора

Я сделал следующее, но это не работает.

document.getElementById('selectTeam').innerHTML = '<select class = "form-control"><?php $teams = ControllerTeam::ctrTeam(); foreach ($teams as $key => $value) { echo '<option value = "'.$value["id"].'">'.$value["name"].'</option>';}?></select>';

что значит "не работает"? это не меняет содержание? содержимое, на которое оно изменяется, неверно?

Cornel Raiu 10.07.2019 02:16

вместо кода PHP попробуйте жестко закодировать <option value = "123">Aha</option> и посмотреть, работает ли это

Cornel Raiu 10.07.2019 02:18

@cornel.raiu Консоль выдает следующую ошибку: login.js: 78 Uncaught TypeError: невозможно установить для свойства 'innerHTML' значение null. Я пробовал с более простым примером, и он работает. Я думаю, что проблема заключается в сочетании двойных и одинарных кавычек в части php внутри innerHTML.

user11486953 10.07.2019 02:20

Это работает? document.getElementById('selectTeam').innerHTML = '<select class = "form-control"><option value = "123">Aha</option></select>';

Cornel Raiu 10.07.2019 02:21

@cornel.raiu Да. Теперь работают простейшие примеры. На данный момент проблема заключается в части php внутри внутренней части, я думаю, что уверен, что это из-за двойных и одинарных кавычек

user11486953 10.07.2019 02:23

возможно ли, что когда вы делаете это с помощью PHP, элемент selectTeam не загружается ПЕРЕД частью JS? Вы делаете JS-часть onLoad или что-то в этом роде? Проверьте этот пример с точно такой же ошибкой, которую вы получаете: stackoverflow.com/questions/18239430/…

Cornel Raiu 10.07.2019 02:23

Возможный дубликат Невозможно установить для свойства "innerHTML" значение null

Cornel Raiu 10.07.2019 02:24

Ошибка связана не с содержимым, которое вы пытаетесь добавить, а с тем фактом, что JS не находит это: document.getElementById('selectTeam') поскольку JS загружается перед содержимым в вашем случае, следовательно, оно равно нулю. Итак, JS видит это так: (null).innerHTML='bla bla' что недопустимо

Cornel Raiu 10.07.2019 02:27

@cornel.raiu Да. Уже та ошибка не появляется. Что происходит сейчас, так это то, что при печати html, который я указываю в innerHTML, часть php появляется в виде комментария.

user11486953 10.07.2019 02:29

я добавлю ответ

Cornel Raiu 10.07.2019 02:30

@cornel.raiu спасибо

user11486953 10.07.2019 02:31
Поведение ключевого слова "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
11
438
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем коде опечатка. Пожалуйста, измените его на:

document.getElementById('selectTeam').innerHTML = '<select class = "form-control"><?php
$teams = ControllerTeam::ctrTeam();
foreach ($teams as $key => $value) {
    echo '<option value = "' . $value["id"] . '">' . $value["name"] . '</option>';
}
?></select>';

Код, который вы мне дали, также содержит опечатку. Я поставил его в свой проект, и он дает ошибку

user11486953 10.07.2019 02:08

Я думаю, что проблема в двойных и одинарных кавычках

user11486953 10.07.2019 02:09

почему бы вам не подготовить строку параметров вне JS и добавить туда только переменную. Код станет намного читабельнее.

Cornel Raiu 10.07.2019 02:15
Ответ принят как подходящий

Первая проблема заключается в том, что, вероятно, контент загружается после JS, поэтому селектор возвращает null, следовательно, ошибка в коде OP. Невозможно установить для свойства "innerHTML" значение null

Это означает, что вы должны выполнять код JS только в window.load или любом другом подобном событии, которое обеспечивает загрузку HTML перед попыткой выполнения.

Теперь о другой проблеме в комментариях, если вы перепишете PHP-код следующим образом:

<?php
$teams = ControllerTeam::ctrTeam();

$options_html = '';
foreach ($teams as $key => $value) { 
    $options_html .= '<option value = "' . $value["id"] . '">' . $value["name"] . '</option>';
}?>

И в JS - убедитесь, что он загружается на window.load или аналогичный -

document.getElementById('selectTeam').innerHTML = 
    '<select class = "form-control"><?php echo $options_html ?></select>';

Это делает код более читаемым и облегчает отладку.

Идеально! Спасибо :)

user11486953 10.07.2019 02:38

Рад, что смог помочь!

Cornel Raiu 10.07.2019 02:38

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