Как я могу отделить JavaScript от PHP, когда JS нужна переменная PHP? - PullRequest
8 голосов
/ 22 августа 2009

Ниже приведен небольшой фрагмент кода, который я видел в jquery и PHP.

Обратите внимание на часть PHP в строке 5, я обычно помещаю свой javascript в отдельные файлы, чтобы я мог хранить свой JS в отдельных файлах, но при этом использовать PHP при необходимости, как показано ниже?

//when the DOM is ready  
$(document).ready(function(){  
    //settings on top  
    var domain = 'http://davidwalsh.name/';  
    var initialPosts = <?php echo get_posts(0,$_SESSION['posts_start']); ?>;  
    //function that creates posts  
    var postHandler = function(postsJSON) {  
        $.each(postsJSON,function(i,post) {  

Ответы [ 6 ]

9 голосов
/ 22 августа 2009

Что я обычно делаю, это:

  • поместите как можно больше JS в файл .js (для кэширования на стороне клиента и все такое)
  • этот код JS использует переменную JS
  • что переменная JS объявлена ​​/ инициализирована из файла PHP; это единственная часть, где вам нужен код, выполняемый на стороне сервера, на самом деле

Например, у меня было бы что-то вроде этого, я полагаю:

my-file.php:

var thisIsMyJSVar = '<?php echo $test; ?>';

Итак, в PHP мы объявляем переменную и устанавливаем ее значение. Это «динамическая» часть.

и в my-file.js:

//when the DOM is ready  
$(document).ready(function(){  
    //settings on top  
    var domain = 'http://davidwalsh.name/';  
    var initialPosts = thisIsMyJSVar;  // Use the JS variable declared in the PHP file
    //function that creates posts  
    var postHandler = function(postsJSON) {  
        $.each(postsJSON,function(i,post) {

Здесь, в статическом файле JS, мы используем только значение; здесь нет ничего динамического, и этот файл может быть кэширован клиентом, чтобы его нельзя было повторно загружать на каждой странице.


Проблема с этой идеей в том, что файл JS зависит от некоторой инициализации, выполняемой в файле PHP: - (

Итак, было бы неплохо иметь "значение по умолчанию" в файле JS, на всякий случай ...


Кроме того, вы должны иметь хорошее соглашение о присвоении имен, чтобы не иметь несколько файлов, использующих / declaring / в зависимости от одной и той же переменной JS; на самом деле было бы неплохо поместить все ваши «переменные конфигурации» в один объект javascript, чтобы не загрязнять глобальное пространство имен ...

3 голосов
/ 22 августа 2009

Если вы хотите сохранить свой Javascript отдельно от вашего PHP, то используйте файл PHP для генерации небольшого фрагмента Javascript просто для установки переменных. Затем используйте эти переменные из вашего файла .js:

HTML:

<script>
var INITIAL_POSTS = <?php echo get_posts(0,$_SESSION['posts_start']); ?>;
</script>
<script src="my.js">

my.js Javascript файл:

//when the DOM is ready  
$(document).ready(function(){  
    //settings on top  
    var domain = 'http://davidwalsh.name/';  
    var initialPosts = INITIAL_POSTS;  
    //function that creates posts  
    var postHandler = function(postsJSON) {  
        $.each(postsJSON,function(i,post) {
1 голос
/ 22 августа 2009

Вы всегда можете сделать так, чтобы php «записал» файл javascript вместо того, чтобы он был статичным - ничто не остановит <script src="script.php"> ...

0 голосов
/ 22 августа 2009

До тех пор, пока кто-то не заскочит в ответ:

Вы можете определить глобальную переменную js в своем файле php / html и сослаться на нее в своем скрипте:

PHP / HTML:

<script>
var global = <?php echo get_posts(0,$_SESSION['posts_start']); ?>;
</script>

ЯШ:

...
var initialPosts = global;
...
0 голосов
/ 22 августа 2009

Есть два основных способа справиться с этим, которые вообще не требуют смешивания JavaScript и PHP:

  1. Когда PHP генерирует страницу, он должен записать этот вывод (get_posts(0,$_SESSION['posts_start']); в скрытый ввод в форме (или в другом месте на странице). JavaScript может легко получить доступ к этому
  2. Пусть JavaScript извлекает этот вывод из отдельного PHP-запроса через AJAX.

Как правило, если это значение не изменится, когда посетитель просматривает страницу (или вам все равно, если оно изменится, поскольку вы не будете обновлять другое содержимое динамически), напишите его непосредственно на страница.

JavaScript и jQuery могут легко получить это значение с помощью кода, подобного

var initialPosts = $("#that-hidden-field-mentioned-earlier").val();
0 голосов
/ 22 августа 2009

Это должно работать, я имею в виду файл .php? Так как JS на стороне клиента, php должен обрабатываться через механизм php ДО того, как браузер обработает клиентский javascript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...