Ответ 1
PHP совершенно не имеет отношения к тому, что вы делаете. Сгенерированный HTML - это то, что считается.
В вашем случае отсутствует атрибут src
. Используйте
<script type="text/javascript" src="file.js"></script>
У меня проблема с файлом js в php. если я включаю его так:
?> <script type="text/javascript" href="file.js"></script> <?php
файл не включен, и я получаю сообщение об ошибке, что функция не определена.
Когда я пробую это так:
<script type="text/javascript">
document.write('<script type="text/javascript" src="datetimepicker_css.js"></script>');
</script>
первый тег в функции document.write закрывается <script type="text/javascript">
Каков правильный способ сделать это?
спасибо, Себастиан
PHP совершенно не имеет отношения к тому, что вы делаете. Сгенерированный HTML - это то, что считается.
В вашем случае отсутствует атрибут src
. Используйте
<script type="text/javascript" src="file.js"></script>
В вашем примере вы используете атрибут href
, чтобы указать, где можно найти файл JavaScript. Это должен быть атрибут src
:
?> <script type="text/javascript" src="file.js"></script> <?php
Для получения дополнительной информации см. w3schools.
Я никогда не был поклонником закрытия блоков PHP для вывода контента в браузер, я предпочитаю, чтобы мой вывод был захвачен, поэтому, если в какой-то момент в моей логике я решил, что хочу изменить свой вывод (после того, как результат уже был отправлено) Я могу просто удалить текущий буфер.
Но, как сказал Пекка, основная причина, по которой у вас возникают проблемы с включением javascript, заключается в том, что вы используете href
для указания местоположения файла js, где вы должны использовать src
.
Если у вас есть файл функций с вашими функциями внутри, добавьте что-то вроде:
function js_link($src)
{
if(file_exists("my/html/root/" . $src))
{
//we know it will exists within the HTTP Context
return sprintf("<script type=\"text/javascript\" src=\"%s\"></script>",$src);
}
return "<!-- Unable to load " . $src . "-->";
}
В вашем коде n без необходимости закрытия блоков с помощью ?>
вы можете просто использовать:
echo js_link("jquery/1.6/main.js");
У Pekka есть правильный ответ (отсюда мой ответ на этот вопрос - Community Wiki): Используйте src
, а не href
, чтобы указать файл.
Относительно:
Когда я пробую это так:
<script type="text/javascript"> document.write('<script type="text/javascript" src="datetimepicker_css.js"></script>'); </script>первый тег в функции document.write закрывается
Каков правильный способ сделать это?
Вы не хотите или нуждаетесь document.write
для этого, но на всякий случай do нужно поместить символы </script>
внутри тега script
по какой-то другой причине: вы сделайте это, убедившись, что анализатор HTML (который не понимает JavaScript) не видит литерала </script>
. Есть несколько способов сделать это. Один из способов - выйти из /
, даже если вам не нужно:
<script type='text/javascript'>
alert("<\/script>"); // Works, HTML parser doesn't see this as a closing script tag
// ^--- note the seemingly-unnecessary backslash
</script>
Или, если вы чувствуете себя более параноидально:
<script type='text/javascript'>
alert("</scr" + "ipt>"); // Works, HTML parser doesn't see this as a closing script tag
</script>
... так как в каждом случае JavaScript видит строку как </script>
, но парсер HTML не делает.
В этом отношении нет разницы между выводом HTML PHP и обычной HTML-страницей.
Вам определенно не нужно делать document.write
. Ваш JS не связан с вашим PHP, поэтому в первом примере должна быть некоторая другая ошибка (например, путь к файлу).
На боковой ноте у вас будут проблемы с использованием </script>
в script. Парсер HTML видит закрывающий тег script при сканировании JS до его синтаксического анализа и запутывается. Вы видите, что люди делают такие вещи, как '<'+'/script'
по этой причине.
Edit:
Как T.J. Кроудер указал, на самом деле вам нужно изменить 'href
на src
в теге <script>
. К сожалению, на самом деле Пекка указал на это в своем ответе, поэтому на самом деле добавление его здесь совершенно излишне.
Скорее всего, что путь к file.js со страницы - это не так. до тех пор, пока вы просматриваете страницу и источник просмотра, вы видите тег, его работа, теперь время для отладки, является ли ваш путь слишком относительным, возможно, вам нужно/перед ним.
Если вы действительно хотите использовать PHP, вы можете использовать
include "file.php";
или
require "file.php";
а затем в файле file.php, используйте heredoc и выполните эхо-код.
file.php contents:
$some_js_code <<<_code
function myFunction()
{
Alert("Some JS code would go here.");
}
_code;
В верхней части вашего файла PHP вставьте файл, используя либо include, либо require затем в голове (или разделе тела) эхо в
<?php
require "file.php";
?>
<html>
<head>
<?php
echo $some_js_code;
?>
</script>
</head>
<body>
</body>
</html>
По-другому, но он работает. Просто мои $.02...
Я попробовал это, я получил что-то вроде script type = "text/javascript" src= "createDiv.php? id =" script И в createDiv.php у меня есть documet getElementbyid (imgslide).appendchild(imgslide5).innerHTML = 'php echo $helloworld; ";
И я получил суперману, потому что php в начале createDiv.php Я с ума сходила в $helloWorld php varible, вырезал и вставлял с html-страницы
Но это не сработало бы. Из whitespaces кто-нибудь расскажет кому-нибудь о проблеме с пробелом, потому что мои реальные пробелы php все еще работают, но не этот