php в javascript

Вопросы по вёрстке и JavaScript
Ответить
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

php в javascript

Сообщение because »

Всем привет ! Возник следующий вопрос:
Иногда бывает нужно взять из php переменную и присвоить ее переменной javascript. Но в таком случае, если я выношу js-код в отдельный файл, то php код в нем не исполняется. Почитал на форумах, можно добавить строчку AddHandler application/x-httpd-php .js в htaccess, но у меня возникло сомнение, правильно ли это, и не влечет ли за собой никаких проблем и уязвимостей ?
RTFM !
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: php в javascript

Сообщение slavcodev »

Да нет. Нужно header отправить в скрипте, чтоб браузер распознал файл как js.
Например: ссылка http://localhost/my_script.php

Код: Выделить всё

<?php
header("Content-type: application/x-javascript");
echo 'var t="Hello world!";';
echo 'alert(t);';
?>
var tt='Hello World 2!';
alert(tt);
открыв ссылку, браузер не распознает по расширению файла, а по тому что ему сервер говорит, в данном случае он будет думать что ему отправили javascript скрипты, поэтому его можно легко в html внедрять

Код: Выделить всё

<html>
<head>
<script type="text/javascript" src="http://localhost/my_script.php" />
</head>
</html> 
Жду Yii 3!
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: php в javascript

Сообщение because »

Спасибо, но это не очень красиво будет, при том что у меня 300-400 строчек javascript кода :)
RTFM !
Nihisil
Сообщения: 118
Зарегистрирован: 2010.08.05, 06:39

Re: php в javascript

Сообщение Nihisil »

Я делал через глобальные переменные.
В view:

Код: Выделить всё

<script type="text/javascript" language="JavaScript">
    $(document).ready(function(){
      window.countImg = <?php echo $countImg; ?>;
    });
</script>
В js

Код: Выделить всё

var countImg = window.countImg;
 
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: php в javascript

Сообщение because »

Nihisil писал(а):Я делал через глобальные переменные.
В view:

Код: Выделить всё

<script type="text/javascript" language="JavaScript">
    $(document).ready(function(){
      window.countImg = <?php echo $countImg; ?>;
    });
</script>
В js

Код: Выделить всё

var countImg = window.countImg;
 
тоже была такая мысль. ладно, попробую варианты которые есть ) спасибо
RTFM !
Аватара пользователя
alexzv
Сообщения: 120
Зарегистрирован: 2010.04.23, 00:10
Откуда: Украина, Киев

Re: php в javascript

Сообщение alexzv »

По хорошему глобальные переменные вообще не стоит использовать. Может стоит изменить логику скрипта или получать необходимые в процессе работы данные через AJAX-запрос например в формате JSON... А пытаться встраивать PHP код по внешний файл скрипта - это по моему вообще извращение.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: php в javascript

Сообщение BuCeFaL »

alexzv писал(а):По хорошему глобальные переменные вообще не стоит использовать. Может стоит изменить логику скрипта или получать необходимые в процессе работы данные через AJAX-запрос например в формате JSON... А пытаться встраивать PHP код по внешний файл скрипта - это по моему вообще извращение.
Два запроса вместо одного, тоже, не самое лучшее решение.
Аватара пользователя
Smak
Сообщения: 9
Зарегистрирован: 2011.04.15, 12:27
Откуда: Новосибирск

Re: php в javascript

Сообщение Smak »

Если говорить про Yii, то можно использовать метод Yii::app()->clientScript->registerScript.

например, что бы передать переменную $menu в JavaScript, пишем так:

Код: Выделить всё

$menu = array('Menu 1', 'Menu 2');
Yii::app()->clientScript->registerScript('menuList', 'var menuList = '.json_encode($menu).';'); 
Если это часто надо, то лучше расширить CClientScript, и реализовать в нём метод, например registerScriptData.

Код: Выделить всё

public function registerScriptData($name, $data) {
    Yii::app()->clientScript->registerScript($name, 'var '.$name.' = '.json_encode($data).';');
} 
Ну и вызывать вот так:

Код: Выделить всё

$menu = array('Menu 1', 'Menu 2');
Yii::app()->clientScript->registerScriptData('menuList', $menu); 
Последний раз редактировалось Smak 2011.06.04, 23:15, всего редактировалось 2 раза.
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: php в javascript

Сообщение because »

спасибо ! то что надо )
RTFM !
Ответить