#javascript #php
#javascript #php
Вопрос:
У меня есть этот простой PHP-код с JS внутри оператора if.
<?php
$x = 1;
if($x == "1"){
echo '<script>alert("hello"); window.open("wwww.google.com","_blank");</script>';
//die(); works if this is uncommented
}
?>
Итак, у меня есть этот код выше, и странная вещь заключается в том, что часть JS выполняется только тогда, когда я использую die внутри оператора if, чего я не хочу делать, поскольку страница заканчивается не только этим оператором if, и ниже происходит куча других вещей. Итак, мне было интересно, почему это происходит и как я могу это исправить?
Комментарии:
1. вероятно, потому, что куча других вещей происходит ниже.
2. ИМО, проблема связана с каким-то другим кодом, который не является общим..
3. Вы можете попробовать использовать
flush()
команду для очистки выходного буфера, она должна работать независимо от другого кода ниже.4. Сначала выполняется PHP, а затем javascript. Часть Javascript будет выполняться только после завершения выполнения вашего PHP. Итак, здесь у вас бесконечный цикл, вот почему javascript не выполняется.
5. Вставьте полный код. Это должно сработать, если у вас нет чего-то, блокирующего это выполнение ниже или выше.
Ответ №1:
Вы можете использовать die();
для печати конечного JavaScript напрямую, поэтому сохраните все JS как строковую переменную die('<script>.....</script>');
, и все должно работать нормально.
<?php
$x = 1;
if($x == "1"){
$script = "<script>
var hello = 'Hello';
hello = ' Sir'; ";
$script .= "alert(hello);</script>";
die($script);
}
?>
Теперь вывод
<script>
var hello = 'Hello';
hello = ' Sir';
alert(hello);
</script>
Пример с циклами for
<?php
$x = 1;
if($x == "1"){
$script = "<script>
var hello = 'Hello';
hello = ' Sir'; ";
$script .= "alert(hello);
</script>";
$script .= "<script>";
for($i = 0; $i<5;$i ){
$script .= "console.log(".$i.");";
}
$script .= "</script>";
die($script);
}
?>
Обновление: другой способ, использующий return
внутри function
:
<?php
function echoScript(){
$x = 1;
if($x == "1"){
$script = "<script>
var hello = 'Hello';
hello = ' Sir'; ";
$script .= "alert(hello);</script>";
echo $script;
return;
//so all other scripts inside this function not excuted
}
echo "this shouldn't displayed because function has return";
//and all after won't work
//......
}//end of function echoScript()
//call function
echoScript();
?>
Комментарии:
1. Есть ли способ, чтобы это работало без использования die? Поскольку я хочу, чтобы страница продолжила загрузку после выполнения скрипта.
2. вы имеете в виду, что у вас есть какой-то код после die(), так почему вы используете die() вместо использования echo ? Вы хотите остановить скрипт в этой строке, а затем продолжить через несколько строк?
3. Я просто попытался использовать die, чтобы посмотреть, попадает ли это в мой оператор if, и это произошло, и это был единственный раз, когда мой JS сработал, поэтому я предполагаю, что то, что сказал Рахул, верно, что JS выполняется только после PHP. Да, я надеялся использовать JS здесь, чтобы открыть новую вкладку, но сейчас я смотрю, есть ли для этого опция PHP
4. Правильно, PHP-код будет выполнен со стороны сервера, затем JavaScript выполнит задачу на стороне клиента.