Intereting Posts
Как передать значение vue.js в качестве параметра для маршрута в лезвии «Memcache» не найден в командной строке PHP-скрипт PHP не может определить, вошел ли пользователь в систему или нет. Запуск командного файла из планировщика задач Windows, но скрытого или сведенного к минимуму Статус HTTP для функционального перенаправления Что самое легкое в использовании рамки ORM для PHP? Простейшее двухстороннее шифрование с использованием PHP как я могу изменить путь include в файле php.ini Использование Hook_form_alter для переданных значений веб-формы Обнаруживать, если на сервере установлено расширение PHP FreeType jQuery – Только изменение для элемента с щелчком, не все с тем же классом Почему мой файловый скрипт php не перемещает файл? Лучший способ кэширования результатов запросов, которые изменяются нечасто PHP эквивалентен верхней команде Linux правила Yii2 rbac issue

Каков наилучший способ передать переменную PHP в Javascript?

В настоящее время я повторяю некоторые переменные в скрытых полях ввода и читаю их с помощью Javascript всякий раз, когда мне это нужно.

Я и коллега теперь думают о создании дополнительного файла Javascript с PHP, который содержит только все переменные для Javascript. Таким образом, переменные уже существуют и нет дополнительного кода в HTML.

Каковы хорошие способы передачи переменных с PHP на Javascript? И как звучит наше решение?

Передача общих данных

Обычно используемый формат обмена для JavaScript – JSON , используя json_encode . Файл PHP такой:

 <?php $data = array("test" => "var", "intvalue" => 1); echo json_encode($data); ?> 

затем возвращает литерал объекта JavaScript следующим образом:

 { "test" : "var", "intvalue" : 1 } 

Вы можете прямо отсылать его в переменную JavaScript на своей странице, например:

 var data = <?php echo json_encode($data)?>; 

… или запросить его через Ajax (например, с помощью jQuery getJSON ).

Вывод атрибутов на теги

Если вам просто нужно вывести строку в атрибут тега, используйте htmlspecialchars . Предполагая переменную:

 <?php $nifty = "I'm the nifty attribute value with both \"double\" and 'single' quotes in it."; ?> 

… вы можете вывести его так:

 <div data-nifty-attr="<?php echo htmlspecialchars($nifty)?>">...</div> 

… или если вы используете короткие теги:

 <div data-nifty-attr="<?= htmlspecialchars($nifty)?>">...</div> 
 <?php $my_php_var = array(..... big, complex structure.....); ?> <script type="text/javascript"> my_js_var = <?=json_encode ($my_php_var)?>; </script> 

Я использую для эха их всех вместе во главе HTML. Кажется достаточно чистым для моих нужд 🙂

Есть три способа сделать это:

  • Извлеките их непосредственно в источник javascript: <?echo "var user = '$user';";?> . Работает, но это грязно.
  • Передайте их через запрос ajax. Это самое близкое к тому, что вы можете перейти на перенос переменных, но недостатком является дополнительный HTTP-запрос.
  • То, что вы делаете, которое передает их, создавая скрытые поля формы, а затем читает их.