2014-10-15 3 views
2

Я пытаюсь получить доступ к переменной PHP в JS-файле. Файл js добавляется в конце страницы.Доступ к переменной PHP в файле .JS

Теперь я могу только подумать о двух возможных вариантах, но оба кажутся вроде хаки, и мой вопрос в том, каковы профи & минусы обоих подходов (или есть лучший способ?).

Вариант 1: используйте встроенные скрипты в моем файле HTML, чтобы установить переменную. например

<body> 
    <script type="text/javascript"> 
     var link = "<?= $var ?>"; 
    </script> 
</body> 

Вариант 2: использование HTML data-attributes присвоить переменную в HTML-контейнере, а затем получить его с помощью JQuery. например

В HTML файле:

<body> 
    <div id="container" data-ajaxVar="<?= $var ?>"> 
     Random html 
    </div> 
</body> 

В JS файл:

var link = $("#container").data("ajaxVar"); 

Любые предложения?

+0

Да, обе жизнеспособны, но не забывайте о необходимости побега! – Bergi

ответ

1

Оба варианта по существу одинаковы. Это «самый простой» способ передать статическую переменную от PHP к JS - просто выделите ее в переменную или в контейнер, который вы можете извлечь из нее позже.

Преимущество использования реальной переменной JS в отличие от внедрения значения в атрибут HTML заключается в том, что вы можете размещать в переменной более сложные типы данных, такие как массивы и объекты. С помощью метода data-attribute вы в значительной степени «застреваете» с помощью простых строк. Они могут быть преобразованы позже, но это всего лишь еще один шаг, который вам придется принять.

Другой вариант - передача данных с помощью вызова AJAX после загрузки страницы.

+0

Неправильно ли утверждать, что получение данных с помощью jQuery вызывает накладные расходы по сравнению с настройкой var напрямую? – user3802064

2

Я уверен, вы должны использовать json_encode для этого. Он возвращает JSON-представление значения php. Что-то вроде этого:

В РНР

$n1 = array(); 
echo json_encode($n1); 

В вашем JavaScript

var link = $("#container").data(data.n1); 

не может сделать больше, я на мой телефон, это была боль. Some documentation here.

Смежные вопросы