Я пытаюсь сделать что-то действительно простое. Я знаю, что, вероятно, мне следует использовать ajax, но я просто делаю несколько быстрых тестов.
поэтому у меня есть файл display.php с некоторой переменной, и я хочу отобразить переменную PHP во входном тексте с помощью document.getElementbyID.value = myVariable
//PHP
<?php
$name = 'Patrick';
?>
//HTML
First Name: <input type = "text" id = "fname" name = "fname" value = "" >
//JS
<script type = "text/javascript">
var f = <?php echo($name); ?>;
document.getElementById("fname").value = f;`
</script>
Я продолжаю получать сообщение об ошибке Uncaught ReferenceError: Патрик не определен Не совсем уверен, что не так с моим кодом, он выглядит довольно просто, но он не хочет помещать значение «Патрик» в поле ввода.
Пробовал разные способы записи с помощью '' или с использованием json_encode, но ничего не менял, все равно получая ту же ошибку.
хорошо, я сделал это простым в вопросе, но на самом деле я получаю свое имя $, выполнив $name=$person->name, поэтому я получаю переменную из массива человек
ему все еще нужно var f = '<?echo ... (либо ', либо " перед <echo). попробуйте заменить свой эхо-код только словом patrick, чтобы понять, что мы имеем в виду, echo() не добавляет кавычки для вас. PHP работает на сервере и выводит текст ДО страница запускается в браузере. Вы можете просмотреть исходный код страницы в браузере, чтобы увидеть это.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Uncaught ReferenceError: Патрик не определен
Это потому, что полученный javascript:
var f = Patrick;
Это означает, что установите f на содержимое переменной Patrick.
Поскольку переменная с именем Patrick не определена, вы получите ошибку неперехваченной ссылки.
Вам нужно поставить Патрика в кавычки следующим образом:
var f = "Patrick"; // <-- Note the "
Обратите внимание: поскольку вы хотите передавать данные из PHP в JavaScript, лучше использовать JSON следующим образом:
var f = <?php echo json_encode((string)$data); ?>;
Это позволяет вам передавать более сложные типы данных¹ И вы получите правильные экранированные строки.
Правильные экранированные строки? Если пользовательский ввод Test " (обратите внимание на двойную кавычку), примитивный подход сломается, потому что результирующий javascript будет:
var f = "Test "";
Это не только ошибка, но и проблема безопасности, поскольку пользовательский ввод может содержать произвольный javascript, который будет выполняться.
¹ просто снимите (string) гипс.
кажется, что это работает, но я получаю SyntaxError: отсутствует) после списка аргументов var f = JSON.parse("<?php echo json_encode($fname); ?>"); Я просто скопировал вашу вещь, так что не знаю, почему она отсутствует
несколько исправлений, во-первых, не добавляйте кавычки сами, пусть это сделает json_encode, а во-вторых, если вы хотите использовать JSON.parse(), вам действительно нужно дважды закодировать его, вы можете сделать var f = JSON.parse(<?php echo json_encode(json_encode($data)); ?>); - первый json_encode делает действительный json, но не допустимую строку json, а 2nd encode() преобразует его из json в строку с кодировкой json, но, учитывая, что json в любом случае является допустимым javascript, здесь вообще нет необходимости использовать JSON.parse ! вы также можете просто сделать var f = <?php echo json_encode(...);?>;
@hanshenrik Боже мой, ты прав 😂 Я не думал об этом...
@Anasde К сожалению, моя первая версия моего ответа содержала ошибку, на которую правильно указал Ханшенрик. Теперь это должно работать.
Так-то лучше! я не думаю, что приведение к строке - хорошая идея, но сломается, если/когда он попробует что-то другое, кроме строки
Большое спасибо, ребята, я пытался использовать json_encore раньше, но я думаю, что сделал синтаксическую ошибку, теперь все хорошо. Спасибо вам обоим !
Просто нужно взять его в кавычки.
var f= patrick;не получится,var f = 'patrick';сработает.