::: PHP.com.ua - учимся вместе. ::: ::: PHP.com.ua - учимся вместе. :::



 
   - Разработка CRM для туристического бизнес...
  - тестування по прив"язці до часу...
  - СРОЧНО! Требуется талантливый PHP програ...
  - Оплачу FLASH-сайт под ключ.
  - выборка одним запросом нескольких похожи...
  - функции верификации строк.
  - Помогите вытянуть скрипт отправки почты ...


Главная
Новости
Статьи
Шпаргалки
Файлы
О проекте
Форум
Футболки


FREEhost.com.ua - купил хостинг 10 у.е. на Begun в подарок.

iName.com.ua - регистрация доменных имен и хороший хостинг.

Библиотека программиста - нужный вам исходник или документация по необходимому для вас языку программирования.

Designclub - Клуб дизайнеров Украины.

Регистрация доменов
Хостинг

 HowtoForge.ORG.UA - Это первый Украинский ресурс развития open source программного обеспечения


Путь: Шпаргалки

Шпаргалки

Автор: - Yurik
Дата публикации - 10.05.2005
Просмотров: - 12491

Передача переменных из PHP в Javascript


Достаточно часто передачу некоторых значений из PHP в Javascript делают так:
[php]
<script language="javascript"> 
var a=<?php echo $a?>
alert('A is: '+a); 
</script> 
[

/php]

[nb]Что плохого в таком подходе? Плохо то что JS-код генерируется "на лету", т.е. если он сгенерируется не так как мы того ожидали, получится ошибка или вобще битый JS-код, который трудно отлаживать, особенно если кода много. В дополнение, мы получаем кучу кода который засоряет наш PHP-скрипт (или шаблон), если JS-скрипт используется многократно - его приходится или копировать или инклудить что также усложняет настройку и поддержку продукта. Кроме того лишняя информация (при каждом запросе) пожирает трафик, например в форуме phpBB на каждую страницу генерируется 3-5 кб JS-кода. [/nb]

Лишиться всех этих проблем можно выносом всего JS-кода в отдельный статический *.js файл. Тогда как же передавать ему динамические данные? Очень просто - через скрытые елементы форм. В большинстве случаев JS используют для той или иной работы с <form> так что она у нас есть на странице, но даже если и нет, то к елементу можно обратиться через getElementById. Как же будет выглядеть наш простейший пример в этом случае:
[php]
<script language="javascript"> 
function foo(){ 
var a=document.formName.id1.value; 
alert('A is: '+a); 

</script> 
[

/php]
а в PHP скрипте сделаем
[php]
<form name=formName> 
... 
<input type=hidden name=id1 value="<?php echo htmlspecialchars($var); ?>"> 
</form> 
[

/php]
Теперь единожды отлаженный JS-скрипт будет 1 раз подгружаться клиенту и не будет вызывать разных ошибок вызванных тем что PHP вставил не то значение (например Notice о неустановленной переменной $var). К тому же JS-код стал reusable с любого скрипта, осталось только в теле документа передать ему другое значение.
Таким же способом можно и передавать более сложные переменные, например массивы связанных данных. Для примера возьмём случай когда нужно передать массив ID товаров которые пользователь выбирает через checkbox кнопки и JS-скрипт должен тут же пересчитать например стоимость выбраных, умножив её на количество каждого выбраного товара.
[php]
<script language="javascript"> 
function calc(){ 
var el=document.tovar.elements; 
var counter=document.tovar.counter.value; 
var total=0; 

for (var i=1; i<=counter; i++){ 
  if (el['id'+i].checked=-true){ 
   num=parseInt(el['q'+i].value); 
   price=parseFloat(el['price'+i].value); 
   total=total+num*price; 
  } 

alert('Общая цена: '+total); 

</script> 

.... 

<form name=tovar> 
<?php 
$i
=0
foreach (
$a as $id=>$price){ 

<
input type=text name=q<?=$i?> size=3 maxlength=2 value=1 onchange="calc();"> 
<input name=price<?=$i?> type=hidden value="<?=$price?>" disabled> 
<input name=id<?=$i?> type=checkbox value="<?=$id?>" onclick="calc();"> 
<br> 
<?php 

?> 
<input type=hidden name=counter value=<?=$id?>
... 
</form>[

/php]

У нас получился статический reusable JS для подсчёта цены, который работает со связанным типом данных из PHP: по всем отмеченным ID умножаем количество на цену и получаем сумму.



Обсудить в ФОРУМе - комментариев ()


Путь: Шпаргалки

Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Контакты Design by webFaction Ukrainian PHP Group 2004-2005