2013-08-06 2 views
1
$('#tip2').qtip({ 
    content: { 
    text: '<?php echo "I do work."?>' 
    }, 

В этом случае я использую плагин jquery, но это не имеет значения для вопроса, который я считаю.В каких обстоятельствах мы не должны использовать php внутри javascript?

Я думал, что мне нужно пройти через json-вызовы (или другие методы вызова ajax), потому что php запускается первым, и только позже запускает javascript, но я действительно протестировал этот код и на самом деле отображает текст.

Может кто-нибудь, пожалуйста, возьмите несколько слов, чтобы объяснить, в каких обстоятельствах мы НЕ будем использовать php внутри javascript. Это один из них? Если да, то почему?

У меня явно не получается какая-то клиентская сторона, и рабочий процесс на стороне сервера ... прошу простить мой newbielity по этим вопросам.

Извините, если это был неудобный вопрос.

Update

Пожалуйста, обратите внимание, что я спрашиваю о фактах. Не мнения. Кто-то заявляет: «Вы не должны так поступайте».

Я спрашиваю: «Какие факты (а не мнения) поддерживают это требование?»

+1

Вы не можете смешивать их, как это, PHP является кодом на стороне сервера и работает на сервере, JS - это клиентская сторона, работающая внутри браузеров клиентов. Ваш код создает в вашем html-тексте «echo», я действительно работаю »« becasue не отображаются браузером – dafyk

+2

Если вы абсолютно * имеете *, чтобы получить значения PHP внутри своего JS, я бы рассмотрел использование атрибутов 'data'. К сожалению, печать содержимого с использованием PHP означает, что вы не можете легко разобрать все. – BenM

+0

@dafyk Вы абсолютно можете, если хотите, чтобы выведенный javascript был «text:» Я делаю work.'' –

ответ

3

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

Возможно, PHP-файл генерирует JavaScript, но как и весь динамический контент, он также не может кэшировать (в то время как вы можете настроить заголовки кеширования, изменения в сгенерированном содержимом будут неактивными, будет вынужден найти компромисс между точностью контента и экономией полосы пропускания).

Я бы экспортирование вашего примера, как так:

$('#tip2').qtip({ 
    content: { 
    text: my_var 
    }, 

Затем создайте следующий <script> блок в динамическом файл перед соединением статического:

my_var = '<?php echo 'I do work'; ?>'; 

Таким образом, подавляющее большинство ваших JavaScript будет статичным и будет иметь право на кеширование Max-Age.

Чтобы предоставить вам реальный пример, я недавно внедрил чистую библиотеку JS, которая рисует дискретные данные на холст. Данные, которые должны быть построены, предоставляются CGI (я не использовал PHP, но это не имело значения), поэтому я использовал этот подход для объявления массива значений в динамическом файле, в то время как экстернализация фактического кода обработки и рисования , Он прекрасно работает, использует минимальную пропускную способность из-за кэширования, и по-прежнему очень удобен в обслуживании.

В отличие от некоторых других ответов, я не буду говорить, что вам следует избегать смешивания серверного кода с клиентской стороной; ад, HTML - это код на стороне клиента, который вы создаете на стороне сервера. В зависимости от ваших потребностей, смешивание JS и CGI может расширить ваши возможности и применить мой трюк для кэширования, нет реального недостатка.

+0

Не могли бы вы объяснить мне немного больше о том, что проблема с кешем мы говорим здесь. Это действительно хит? – MEM

+0

В принципе, если вы используете внешний вид своего JavaScript и должным образом кешируете его (max-age, no-revalidate), он будет загружаться только один раз посетителем за счет одноразового дополнительного HTTP-запроса. Как только они будут кэшироваться, их браузеры больше не будут запрашивать его, экономя драгоценную полосу пропускания и, что еще более важно, улучшая скорость загрузки. – Nerius

+0

Итак, это не большой удар по производительности, мы не говорим о секундах при загрузке страниц, но действительно крошечных различиях в микросекундах. Однако, когда мы умножаем это для большого количества страниц или, на действительно больших веб-приложениях, которые могут играть роль в общей производительности всего этого, и это может быть проблемой? – MEM

-3

Вы должны стараться не использовать его как можно больше. Однако могут возникнуть некоторые очень редкие случаи, когда вам нужно передать значения из вашего кода PHP (скажем, из массива $ _SESSION) в ваши функции jQuery/JavaScript.В этом случае, если у вас нет другого варианта, вы можете передавать такие значения, как вы делали выше. Но во всех других случаях старайтесь не делать это как можно больше, поскольку это не очень хорошая практика. Когда вы комбинируете 2 разных языка, например, это может быть случаи, когда вы получаете непредсказуемое поведение с приложения/веб-страницы.

+0

Вы не можете сказать, почему вы думаете, что это не хорошая практика. Конечно, есть причины, по которым вам может понадобиться весь ваш JS-вывод PHP, и это может быть хорошей практикой в ​​зависимости от ситуации. – Brad

+0

Есть ли у вас какие-либо комментарии/предложения, чтобы улучшить мой ответ? – Maximus2012

+1

Похоже, он просто дал вам предложение или предложение ... – Bojangles

1

Файл php интерпретируется веб-сервером и преобразуется в чистый html-файл. Затем этот html-файл передается в браузер клиента, который отображает его.

В вашем случае эхо php отображается как строка на странице html.

Имейте в виду, что если вы выполняете то, что вы сделали в своем примере, значения, отображаемые на странице, являются значениями, которые существуют , когда страница отображается php.

+0

Я знаю об этом, и я не вижу в этом случае проблемы о том, что значения отображаемой страницы являются теми, которые существуют когда страница отображается php. Так как это так, в чем проблема? – MEM

+1

Вы спрашиваете, хотите ли вы ** сделать это, или вы ** можете **? Поскольку в отношении технических ограничений в вашем примере нет ничего плохого. Он должен работать нормально. Должны ли вы ** делать это, это зависит от ситуации. –

+0

Действительно, мой вопрос касался фактов. (следовательно, +1 для этого). Но факты, подтверждающие аргумент: «Почему бы нам так не сделать?» - Кажется, вы представляете одно: «значения, отображаемые на странице, являются значениями, которые существуют, когда страница отображается php» (и это может быть проблемой, поэтому обратите внимание). – MEM

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