Переменная эхо php на внешнем JavaScript возможно? - PullRequest
0 голосов
/ 04 октября 2011

I (абсолютный новичок в php) получил скрипт с различными переменными, которые основаны на дате и времени в верхней части страницы строгого режима xhtml:

<?php

$var1="2011,9,31,18,0,0";

[...]

?>

Внутри тела HTML у меня есть JavaScript, который в настоящее времяначинается следующим образом:

<script type="text"/javascript">

dateFuture = new Date(<?php echo $var1; ?>);

[...]

</script>

Можно ли сделать javascript внешним, но при этом вытащить переменную $ var1 из верхней части страницы индекса, а затем отобразить тот же вывод на странице индекса, что ив настоящее время делает?

Я нашел один пример, где начало внешнего .js должно выглядеть так:

dateFuture = new Date(<?php include("/index.html");echo $var1;?>);

К сожалению, это не похожеработать.Есть ли возможное решение для этого?Любая помощь очень ценится.Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 04 октября 2011

Да.Сделайте переменную javascript глобальной, и вы сможете обращаться к ней внутри внешнего js-файла.Примерно так:

<script type="text/javascript">
  var dateFuture = new Date(<?php echo $var1; ?>);
</script>
<script src="your-external-js-file.js" type="text/javascript"></script>

В your-external-js-file.js вы можете получить доступ к dateFuture.

Или вы можете инкапсулировать код во внешний файл js в классе и передатьна дату из php в качестве параметра для конструктора этого класса.

1 голос
/ 04 октября 2011

Если ваша цель - переместить код javascript во внешний скрипт для лучшей модульности, вы можете переместить его в файл php и затем ссылаться на файл php как javascript.

<script type="text/javascript" src="myscript.php"></script>

Внутри myscript.php -

<?
Header("content-type: text/javascript");
dateFuture = new Date(<?php echo $var1; ?>);
?>
1 голос
/ 04 октября 2011

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

myJS.php:

<?php

// Initialize your PHP variable(s) here, or include the PHP script(s) to do so.
$var1="2011,9,31,18,0,0";

...

?>

dateFuture = new Date(<?php echo $var1; ?>);

В вашем HTML-файле:

<script type="text/javascript" src="myJS.php"></script>

После вывода myJS.php это чисто код JavaScript, расширение файла не имеет значения для браузера.Точно так же, как ваш PHP-код в настоящее время выводит чисто HTML-код, и ваш браузер также понимает, как его анализировать.

0 голосов
/ 14 июля 2015

Да.Это возможно.Однако вам придется превратить файл javascript в файл php, или заставить Apache, или любой другой веб-сервер, который вы используете, запускать javascript как php (совершенно безвредно, потому что весь код за пределами <?php ... ?> просто записывается на выход).

В my-external-js.php или my-external-js.js (в зависимости от того, что вы выберете, хотя я бы порекомендовал первое, поскольку оно требует меньше настроек):

<?php require_once 'file-which-defines-var1.php'; ?>

dateFuture = new Date("<?php print $var1; ?>");

Примечание: вы всегда должны использоватьrequire_once вместо include или require, так что один и тот же файл никогда не включается дважды, что приводит к перепутанным переменным и сталкивающимся функциям / классам.Кроме того, require и require_once приводят к фатальным ошибкам, если скрипт не может быть загружен, а include и include_once - нет.

0 голосов
/ 04 октября 2011

Хотя ответы, данные Джонатаном Ньюмуисом и RonakG, вполне приемлемы и будут работать, цель этого ответа - ответить на ваш вопрос как можно ближе к настройке, которую вы получили сейчас.Однако я лично согласен с ответом RonakG.

Если вы используете Apache на своем сервере, добавьте следующую строку в ваш файл .htaccess: AddType application/x-httpd-php .js.В качестве альтернативы вы можете добавить этот код в конфигурацию Apache, если вас беспокоит производительность.

Цель этого кода, по сути, состоит в том, чтобы сказать, что PHP должен анализировать все файлы, заканчивающиеся на ".js", как если бы онибыли ".php"

...