Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выполнение PHP-кода в файлах JavaScript (https://javascript.ru/forum/misc/55953-vypolnenie-php-koda-v-fajjlakh-javascript.html)

Sergei-b84 22.05.2015 15:24

Выполнение PHP-кода в файлах JavaScript
 
Привет всем. У меня есть javascript файл, который генерирует форму регистрации. Полностью приводить не стал, привел только фрагмент. Сейчас мне необходимо, чтобы внутри это файла выполнялся пхп код. Как это реализовать? Можете на примере показать, как объединить два приведенных листинга. Необходимо, например, вывести ФИО не напрямую, а через пхп.


<?php echo 'ФИО';?>



function(){
return'<input type="text" id="overlay-signup-form-name" name="name" class="signup-name" placeholder="{{#esc_attr}}{{#tl}}ФИО{{/tl}}{{/esc_attr}}" autocomplete="off">\n'
})

Dark Surv 22.05.2015 15:38

Цитата:

Сообщение от Sergei-b84
чтобы внутри это файла выполнялся пхп код

PHP код на клиенте выполнить нельзя, так как PHP - СЕРВЕРНЫЙ язык,
можно выполнить PHP на сервере, потом принять ответ аяксом

Sergei-b84 22.05.2015 15:47

А если так? .htaccess
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js

<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>

Dark Surv 22.05.2015 15:58

Припустим есть PHP файл <?php echo 'Ваша фамилия'; ?> ($fio = нужное вам значение значение)
что-бы получить $fio на клиенте обращаемся аяксом на сервер

<script type="text/javascript">
var xhr = new XMLHttpRequest();
  xhr.open('GET', 'fio.php', true); // url = нужный вам адрес
  xhr.send(null);

  xhr.onreadystatechange = function(){
    if (xhr.readyState != 4) return;
    if (xhr.status != 200){
      alert(xhr.status + ': ' + xhr.statusText);
    }else{ // если нет ошибок возвращаем нужный текст
      document.querySelectorAll('#content')[0].innerHTML = '<input type="text" id="overlay-signup-form-name" name="name" class="signup-name" placeholder="' + xhr.responseText + '" autocomplete="off">\n';
	}
  }
</script>
<div id="content"></div>

Dark Surv 22.05.2015 16:01

Цитата:

Сообщение от Sergei-b84
А если так? .htaccess
Код:

AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>


этот вариант НЕПОДХОДИТ потому-что будут выполнятся ВСЕ JavaScript файлы как PHP файлы (если .htaccess в корне сайта)

Sergei-b84 22.05.2015 16:13

Спасибо. Все работает!!!

Sergei-b84 22.05.2015 16:15

Хотел спросить, а если нужно получить несколько переменных?

Dark Surv 22.05.2015 16:17

Цитата:

Сообщение от Sergei-b84
нужно получить несколько переменных?

можно например в JSON получить и роспарсить

Sergei-b84 22.05.2015 16:18

Спасибо.

kostyanet 22.05.2015 17:10

Цитата:

Сообщение от Sergei-b84
Необходимо, например, вывести ФИО не напрямую, а через пхп.

Когда скрипт оказался в браузере, ему уже никто не поможет кроме браузера. В принципе не важно на каком языке он написан, хоть на перфораторе, интерпретировать и компилировать коды может только браузер. Следовательно если каких-то данных браузеру не хватает, надо за ними идти на сервер и пехепе тут вообще не при чем.

kostyanet 22.05.2015 17:14

Цитата:

Сообщение от Sergei-b84
У меня есть javascript файл, который генерирует форму регистрации.

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

Но тут есть одно но. Жырное такое, НО. Если вы будете рендерить хтмл нативными методами, типа там создать ноду, профтыкать в нее проперти, профтыкать в родитель, родителя в боди - у вас даже на хорошей либе получится куча кодов, то есть текстов, байтов, которыми могли бы бы тупо коды хтмля сделанного прямо на сервере. А если js как у вас будет передавать шаблон в хтмл, то вообще эквипенисуально по байтам.

Генерить хтмл имеет смысл когда многое в нем зависит от контекста, а когда там вечное - нахер.


Часовой пояс GMT +3, время: 00:01.