Есть ли способ загрузить JavaScript перед PHP


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

Тем не менее, я хотел бы знать, есть ли какой-либо метод для загрузки JavaScript перед PHP.

Эта идея исходит из следующей проблемы. У меня есть script, который показывает типичный диалог " загрузка...". когда запросы PHP не очень тяжелые это не займет много времени, чтобы быть отображены во время загрузки HTML.

Это будет структура script:

<html>
    <head>
        <script>
            waitingDialog.show('CARGANDO...', {dialogSize: 'sm', progressType: 'warning'});
        </script>
    </head>
    <?php
        //AQUI IRIA EL PHP COMPLETO
    ?>
    <body>
        ....
    </body>
    <script>
        $(document).ready(function() {
            waitingDialog.hide();
        });
    </script>
</html>

в случае тяжелого PHP страница остается загруженной некоторое время, но не отображает сообщение загрузки, потому что, как упоминалось в начале PHP загружается перед JavaScript.

Carga

как вы видите, минута ожидания может быть очень тяжелой для пользователя и даже если у него нет сообщения о том, что страница загрузка.

я провел некоторое исследование, и большинство из них говорят, что загрузка JavaScript перед PHP невозможна, но, возможно, есть способ, чтобы загрузка страницы была структурирована, оставляя самое тяжелое до конца (я не знаю, возможно ли это или нет).

Примечание: в качестве обходного пути было предложено искать plugin php пусть покажет этот диалог. Поэтому я также принимаю ответы с использованием других плагинов.

Author: Comunidad, 2017-06-26

3 answers

Короткий ответ: не удается загрузить JS перед PHP.

Длинный ответ: вам придется имитировать его с помощью AJAX.

Короче говоря, вы запускаете HTML с loader и без PHP, и Ajax (в document.ready) вы вызываете PHP, который отображает содержимое вашей страницы, как только вы получите ответ PHP, вы включаете содержимое на своей странице в body и закрываете диалог. Это основной принцип SPA (Single-Page Application).

 8
Author: Pedro Adame Vergara, 2017-06-26 08:33:01

Так, как вы это представляете, невозможно. Как вы правильно указываете в своем вопросе, общий процесс, который следует за выполнением вашей страницы, выглядит следующим образом:

  1. HTTP-запрос выполняется на ваш сервер от клиента при доступе к веб-адресу.
  2. веб-сервер получает этот запрос и обрабатывает его. Если, как и в случае, этот запрос включает выполнение PHP-кода, сервер выполняет этот PHP-код, генерируя текстовый файл (HTML-документ), который содержит кроме того, код Javascript.
  3. этот HTML-текстовый документ отправляется обратно клиенту, который через браузер интерпретирует его, выполняя его сверху донизу.

Таким образом, PHP-код всегда выполняется на этапе сервера, и этот сервер не выполняет код Javascript, который находится внутри HTML-документа, сгенерированного сервером. Таким образом, PHP код всегда выполняется на сервере перед возвратом документа текст, сгенерированный клиенту, и пусть он выполняет весь код, содержащий

Чтобы получить то, что вы предлагаете, вы должны от клиента и с помощью Javascript захватить событие, которое генерирует HTTP-запрос на сервер (например, нажав на ссылку) и, прежде чем сделать запрос вручную, запустить код javascript отображения ожидания. Таким образом, сообщение ожидания будет выполняться до тех пор, пока HTTP-запрос не получит ответ, после чего я бы загрузил полученный документ, сгенерированный на сервер, в браузер.

Вы также можете решить эту проблему с помощью запросов AJAX, чтобы изменить часть HTML-документа, сгенерированного с помощью PHP. Перед выполнением запроса AJAX вы запускаете код Javascript отображения ожидания, а когда вы получаете ответ AJAX, вы изменяете часть документа, которая была обработана с помощью PHP, и останавливаете выполнение отображения ожидания.

 3
Author: Carlos A. Gómez, 2017-06-26 08:54:01

В зависимости от буфера, который реализует сервер, какой-то прокси или сам клиент (браузер). этот метод, обсуждаемый в руководстве php, может или не может работать. http://php.net/manual/es/function.flush.php . это в основном отправка кусков html, очищающих буфер php, и использование механизма рендеринга браузера, который попытается показать, что у вас есть по частям (с забавными случаями, такими как таблицы в некоторых версиях ie, которые не отображаются полными, пока вы этого не сделаете закрывает таблицу)

Это метод, который очень зависит от технологии, но может оказаться полезным в контролируемых средах.

Я оставляю вам пример, взятый из руководства php с вариантом для отображения javascript, потянув console.журналы каждые n секунд

<html>
<head>
  <title>Flush Example Page plus js timer countdown</title>
  <script>
    var i = 0;
    var funcNameHere = function(){
        if (i == 10) clearInterval(this);
        else console.log( 'Currently at ' + (i++) );
    };
    // This block will be executed 10 times.
    setInterval(funcNameHere, 1500);
    funcNameHere();
</script>
</head>
<?php ob_flush(); ?>
<?php flush(); ?>
<body>
<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++){

    echo "<br> Line to show.";
    echo str_pad('',4096)."\n";

    ob_flush();
    flush();
    sleep(2);
}

echo "Done.";
ob_end_flush();

?>

Протестировано на apache (ubuntu) и chrome(win)

Php адаптирован из: http://php.net/manual/es/function.flush.php#54841

Javascript адаптирован из: https://stackoverflow.com/a/26271149/1423096

 0
Author: alo Malbarez, 2018-04-03 02:53:35