Использовать функции общей библиотеки js

В моем приложении laravel 5.6 / jquery мне нужно создать некоторый файл js с общими функциями и доступный во всех файлах js моего проекта. и для этого в шаблоне приложения resources / views / cardsBS41Frontend / layouts / frontend.blade.php Я добавил определение js / app_funcs.js:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>@if(isset($site_name)){{ $site_name }}@endif</title>

    <!-- Styles -->
    <link href="{{ asset('css/frontend.css') }}" rel="stylesheet">
    <link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet">

    <!-- Scripts -->

    <script src="{{ asset('js/jquery-3.3.1.min.js') }}"></script>

    <script src="{{ asset('js/app.js') }}{{  "?dt=".time()  }}" defer></script>
    <script src="{{ asset('js/app_funcs.js') }}{{  "?dt=".time()  }}" defer></script>
    <script src="{{ asset('/js/bootstrap.js') }}" defer></script>

    <!-- Fonts -->
    <link rel="dns-prefetch" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css?family=Raleway:300,400,600" rel="stylesheet" type="text/css">

</head>
<body>
<div id="app">

    <main class="py-4">
        @yield('content')
    </main>
</div>

@section('scripts')


@endsection

@yield('scripts')


</body>

@include($frontend_template_name.'.layouts.footer')
</html>

и в шаблоне лезвия resources / views / cardsBS41Frontend / vote.blade.php я прикрепляю файл /vote.js, который относится только к этому шаблону:

@extends($frontend_template_name.'.layouts.frontend')
@section('content')
    <div class="container">
      ...CONTENT OF MY PAGE
    </div>


@endsection

@section('scripts')

            <script src="{{ asset('js/'.$frontend_template_name.'/vote.js') }}{{  "?dt=".time()  }}"></script>

            <script type="text/javascript" language="JavaScript">
                /*<![CDATA[*/

                var frontendVote = new frontendVote('view',  // must be called before jQuery(document).ready(function ($) {
                    <?php echo $appParamsForJSArray ?>
                );
                jQuery(document).ready(function ($) {
                    frontendVote.onFrontendPageInit('view')
                });

                /*]]>*/
            </script>

 @endsection

Но в файле vote.js, когда я вызываю функцию js файла js / app_funcs.js, я получаю ошибку, которая

Uncaught ReferenceError: functionname is not defined

Я ожидал использовать функции js / app_funcs.js, так как этот файл прикреплен, и я вижу в консоли браузера этот файл js / app_funcs.js извлекается ОК ПЕРЕД /vote.js.

Можете ли вы мне подсказать, что не так и как правильно?

Спасибо!

1
0
81
1

Ответы 1

Вы загружаете сценарий app_funcs.js с помощью defer. Это означает, что скрипт загружается параллельно с HTML, но откладывает выполнение до тех пор, пока HTML не будет проанализирован. Поскольку вы загружаете сценарий vote.js без defer, он немедленно останавливает синтаксический анализ, загрузку и выполнение HTML, фактически выполняя его перед сценарием app_funcs. Либо отложите загрузку вашего сценария vote, либо не используйте defer со сценарием app_funcs.

Другие вопросы по теме