Передача параметрів в PHP

Матеріал з Вікі ЦДУ
Версія від 21:35, 24 травня 2010; Tarasenko A (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Существует два широко распространенных решения этой задачи.

1) Генерация JS кода с помощью серверного скрипта.

Тут нужно помнить о том, что любой запуск скриптов на сервере создает дополнительную нагрузку. Поэтому генерировать JS скрипты целиком не правильно. Гораздо проще вставить небольшой фрагмент JS кода, который создаст массив с параметрами, прямо внутрь страницы, а основную часть JS кода разместить в статичных файлах.

Поясню сказанное на примере.

Допустим у нас есть страница (index.php) и js файл (my-scripts.js). Нам нужно передать несколько параметров из массива $config.

Страница будет выглядеть так.

  1.
     <script type="text/javascript">
  2.
         $(function() {
  3.
             $.config = {
  4.
                 par1:<?php echo $config['par1']; ?>
  5.
             };
  6.
         });
  7.
     </script>
  8.
     <script type="text/javascript" src="my-script.js"></script>

Как видите, мы создали глобальный хеш ($.config) и установили для его элемента par1 значение из массива $config.

Примечание. Для работы этого примера нужно подключить библиотеку jQuery.

Теперь хеш $.config можно использовать в my-script.js. Например, так

  1.
     $(function() {
  2.
         alert($.config.par1);
  3.
     });

Примечание. Если вам нужно передавать сложные структуры с параметрами, то будет удобнее использовать JSON формат.

2) Передача параметров в атрибуте src скрипта.

Этот способ используется загрузчиком библиотеки Script.aculo.us.

Идея следующая.

1) Необходимые параметры добавляются прямо к адресу скрипта. Напрмер, так

src="my-script.js?par1=myValue&par2=value2

Т.е. мы формируем GET запрос. Но естественно статичный JS файл его обработать не может.

2) Чтобы получить доступ к этим параметрам, мы добавляем в JS файл код, который:

2.1) находит соответствующий тег script;

2.2) читает его атрибут src;

2.3) получает строку с параметрами, например, с помощью такого регулярного выражения /my-script\.js(\?.*)?$/

2.4) разбирает строку с параметрами (это можно сделать с помощью функции split).

Приводить пример для этого способа я не буду, т.к., во-первых, его можно посмотреть в исходниках script.aculo.us (файл scriptaculous.js, строки 48-56), а во-вторых, на мой взгляд, он обладает несколькими серьезными недостатками.

1) Вы не сможете передать большой объем данных таким способом, т.к. существуют ограничения на длину URL.

2) Значительно усложняется код как серверной, так и клиентской частей приложения. Сервер должен преобразовать массив с данными в строку, а браузер выполняет обратную операцию.