javascript не выполняется внутри цикла PHP, если я не использую die()

#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 выполнит задачу на стороне клиента.