Как определить переменную в javascript с функцией echo, из внешнего php-файла?
У нас есть theconfigfile.php , thejsfile.js и thephpfile.php .
В файле theconfigfile.php мы имеем:
<?php $path = 'http://example.com/home.php'; // Set your path ?>
В thejsfile.js мы имеем:
... if (confirm("Are you sure you want to delete")) { $.ajax({ type: "POST", url: "http://example.com/home.php", data: dataString, cache: false }); ...
И в thephpfile.php мы имеем:
<php include "theconfigfile.php"; ?> <html> <head> <script type="text/javascript" src="thejsfile.js"></script> </head> <body> ...here is the code that uses file thejsfile.js... </body> </html>
Я использовал этот метод:
... if (confirm("Are you sure you want to delete")) { $.ajax({ type: "POST", url: "<?php echo $path; ?>", data: dataString, cache: false }); ...
Работает только в том случае, если javascript является частью кода. И если я использую его внешним, вот так …
<script type="text/javascript" src="thejsfile.js"></script>
…не работает! Решения?
Есть несколько способов сделать это.
Вы можете настроить свой веб-сервер для обработки файлов с расширением .js
с помощью PHP и просто вставлять свой PHP там. Конечно, это означает, что вам нужен способ действительно вычислить переменную там, и это замедлит обслуживание вашего обычного содержимого javascript.
Вы можете просто вывести переменную PHP в переменную Javascript внутри элемента <script>
подобного этому
<script type="text/javascript"> var path = "<?php echo $path; ?>"; </script>
И затем получите доступ к этой переменной path
в вашем AJAX. Большинство из них, вероятно, будут использовать второй подход.
Вы можете переименовать свой thejsfile.js
в thejsfile.php
, добавить его к самому началу , и он должен быть проанализирован для PHP:
<?php header("Content-type: text/javascript"); ?>
Затем сделайте следующее:
<head> <script type="text/javascript" src="thejsfile.php"></script> </head>
Другой вариант – просто настроить сервер для анализа файлов .js
для PHP.
В файле thephpfile.php,
<html> <head> <script type="text/javascript"> var config = { url: '<?= $path; ?>' }; </script> <script type="text/javascript" src="thejsfile.js"></script> </head>
Затем вы можете получить к нему доступ с помощью config.url в своем javascript.
Вы можете поместить значения таким образом только в файлы, которые обрабатываются PHP.
Внешние JavaScript-файлы не обрабатываются PHP, поэтому они связаны как без поддержки.
Если вы не отправляете сообщение на другой сервер через JSONP, вы можете просто рассмотреть использование относительного пути, жестко закодированного в вашем Javascript, так что вам не нужно отправлять путь с сервера клиенту:
... $.ajax({ type: "POST", url: "home.php", data: dataString, cache: false }); ....
Но если это URL-адрес, который часто изменяется, и он действительно нуждается в настройке, вы можете отбросить переменную PHP как скрипт примерно так:
<html> ... <script src="thejsfile.js" type="text/javascript"> <script type="text/javascript"> // 'path' is a variable that is defined in thejsfile.js path = '<?php echo htmlentities($path) ?>'; </script> ...
Всякий раз, когда вы выводите информацию с сервера клиенту (особенно в виде Javascript), вы должны быть ДЕЙСТВИТЕЛЬНО осторожны, чтобы избежать экранирования атак (то есть разрешить людям вставлять javascript в ваш код). В этом случае нет причин разрешать любые типы html-символов.
При работе с внешними JS-файлами вы можете сохранить значение в скрытом поле и получить значение полей с помощью JavaScript.
<input type="hidden" name="path" id="path" value="<?php echo $path; ?>" />
и в javascript (я буду использовать jquery)
var path = $('#path').attr('value');
Очевидно, вы могли бы записать переменную в теги сценария на странице, но если вы используете какой-либо расширенный тип шаблонов, может быть трудно получить доступ к этой переменной.
echo "<script type='text/javascript'>var AccomodationInfoForm4 =".$path."</script>";
Просто попробуйте повторить путь, показанный выше, и вы можете получить доступ к своей переменной в любом месте. Поскольку это будет доступно глобально для всех ваших js
файлов на вашей странице.