За последние 24 часа нас посетили 20503 программиста и 1127 роботов. Сейчас ищут 692 программиста ...

Вызов функции с js-файла

Тема в разделе "JavaScript и AJAX", создана пользователем AlexG, 13 апр 2019.

  1. AlexG

    AlexG Новичок

    С нами с:
    10 ноя 2017
    Сообщения:
    18
    Симпатии:
    0
    Всем привет.
    Собственно проблема следующего характера: имеем 3 файла (1.php, 2.php, 3.js). В файле 1.php содержится разметка страницы (другими словами html), в файле 2.php содержится код php, ну и в файле 3.js есть наши скрипты.
    Приблизительный листинг файлов.
    1.php
    HTML:
    1. <?php
    2.    require_once("2.php");
    3. ?>
    4. <!DOCTYPE html>
    5. <html lang="ru">
    6.     <head>
    7. ...
    8.     </head>
    9.     <body>
    10. ...
    11. <button type="submit" name="ura_zarabotalo" class="btn btn-success">Ура, заработало</button>
    12.         <script type="text/javascript" src="jquery-3.3.1.min.js"></script>
    13.         <script type="text/javascript" src="3.js"></script>
    14.     </body>
    15. </html>
    2.php
    PHP:
    1. <?php
    2. //Всю петрушку описывать не буду, она не важно, там идет обработка и проверка массива $data, вот только важно окончательное условие
    3.     if ( empty($errors) )
    4.     {
    5.         //ошибок нет
    6.        echo "<script>ShowMyNotify(1,'Ура','Все гут');</script>";
    7.     }else
    8.     {
    9.         //ошибки есть
    10.              echo "<script>ShowMyNotify(3,'Йопт','Засада');</script>";
    11.     }
    12. }
    3.js
    Код (Javascript):
    1. function ShowMyNotify(idMessage, textTitle, textBody) {
    2.     alert(idMessage+textTitle+textBody);
    3.  
    4. };
    Так вот соль начинается в том, что в файле 2.php я естественно не подключаю свой js, т.к. у меня там только php-код, да и не нужен он там.
    В файле 1.php я подключаю все свои скрипты перед закрывающим тегом body, и вместе с тем в первых строках подключаю 2.php. Происходит ошибка
    Код (Text):
    1. Uncaught ReferenceError: ShowMyNotify is not defined
    2.     at 1.php:1
    Как я думаю, по той причине, что файл с самими скриптами подключается позже.
    Как быть в данной ситуации? Вызов функции со скрипта необходим именно с файла 2.php
    Может в самом скрипте (или где-то еще) дожидаться загрузки страницы и как это сделать?

    Да, забыл написать, если подключать 2.php после скриптов, то все работает замечательно. Но в этом файле еще есть генерация html для файла 1.php =)
    Во, завернул =)

    Есть конечно идея разделить файл на 2.php на 2 файла и все заработает, но не хотелось бы.
    Спасибо за помощь.
     
    #1 AlexG, 13 апр 2019
    Последнее редактирование: 13 апр 2019
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    выводи сразу алерт, в твоей функции нет смысла:
    PHP:
    1. if ( empty($errors) )
    2.     {
    3.         //ошибок нет
    4.        echo "<script>alert(1,'Ура','Все гут');</script>";
    5.     }else
    6.     {
    7.         //ошибки есть
    8.              echo "<script>alert(3,'Йопт','Засада');</script>";
    9.     }
    10. }
     
  3. AlexG

    AlexG Новичок

    С нами с:
    10 ноя 2017
    Сообщения:
    18
    Симпатии:
    0
    Ну, вообще-то, алерт я указал для примера. Мне важно разобраться с логикой решения задачи, а под свои задачи я ее уже "прогну".
     
  4. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    php быстрее отработал и удалился. Скрипт js подключай выше ( до echo )
     
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @AlexG, можно вынести действия в js-файлы и подключать их с атрибутом defer.
    Подробности
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    Вывод <script> до <!DOCTYPE html> ? Или неудачный пример, или пересмотрите реализацию.

    Можно. Но обычно в этом нет необходимости. Если шаблон нужно выполнить в каком-то контексте/окружении, то просто делают его подключение, а не подключение к нему.