Laravel Mix Uncaught ReferenceError:未定义$

时间:2018-08-16 04:41:57

标签: javascript php jquery laravel laravel-mix

我已经搜索了很多,但找不到关于我的问题的答案。所以这是我的问题。我正在尝试使用Laravel Mix全局加载jQuery。我尝试修改各种文件,但似乎无济于事……我仍然收到“未定义$”的错误。

这是我的代码。

Bootstrap.js

window._ = require('lodash');
window.Popper = require('popper.js').default;

try {
    window.$ = window.jQuery = require('jquery');

    require('bootstrap');
} catch (e) {}

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';


let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

webpack.mix.js

mix.js('resources/assets/js/app.js', 'public/js')
   .js('resources/assets/js/select2.min.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css')
   .sass('resources/assets/sass/admin/app.scss', 'public/css/admin')
   .copy('resources/assets/css/fontawesome.css', 'public/css')
   .copy('resources/assets/css/select2.min.css', 'public/css')
   .copy('resources/assets/webfonts', 'public/webfonts')
   .copy('resources/assets/js/tinymce', 'public/js/tinymce');

mix.browserSync('http://localhost:8000');

我遇到的错误:

Error Screenshot

  

未捕获的ReferenceError:未定义$

@section('scripts')中create.blade.php内部的代码

<script>
   $(function(){
        alert();
    });
</script>
{{-- Tiny MCE --}}
<script src="/js/tinymce/tinymce.min.js"></script>
<script>
    tinymce.init({
        selector:'textarea',
        plugins: 'link',
        menubar: false,
        branding: false,
        resize: false,
        statusbar: false,
        force_br_newlines : false,
        force_p_newlines : false,
        forced_root_block : '',
        toolbar:    ['undo redo | cut copy paste | removeformat',
                    'bold italic underline | link | outdent indent | alignleft aligncenter alignright alignjustify alignnone',],
    });
</script>

{{-- Image Javascript --}}
<script type="text/javascript">
    $(function() {

        // We can attach the `fileselect` event to all file inputs on the page
        $(document).on('change', ':file', function() {
            var input = $(this),
            numFiles = input.get(0).files ? input.get(0).files.length : 1,
            label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
            input.trigger('fileselect', [numFiles, label]);
        });

        // We can watch for our custom `fileselect` event like this
        $(document).ready( function() {
            $(':file').on('fileselect', function(event, numFiles, label) {

            var input = $(this).parents('.input-group').find(':text'),
            log = numFiles > 1 ? numFiles + ' files selected' : label;

            if( input.length ) {
                input.val(log);
            } else {
                if( log ) alert(log);
            }

            });
        });

    });
</script>

最后是我的布局文件

<!-- Scripts -->
        <script src="{{ asset('js/app.js') }}" defer></script>

        {{-- Page Specific Scripts --}}
        @yield('scripts')

    </body>

我在做什么错?!?!?

Console.log(e)不返回任何内容...这意味着jquery应该正确加载但没有加载。

this is the app.js file

Still giving same error

4 个答案:

答案 0 :(得分:2)

我在Laravel 6上遇到了同样的问题。您可以做两件事...

或从脚本标记中删除de defer

<script src=”{{ asset(‘js/app.js’) }}” defer></script>

应该是:

<script src=”{{ asset(‘js/app.js’) }}"></script>

或者在Blade模板中的load事件之后使用jQuery;

<script>
window.addEventListener('load', function() {
   console.log($);
});
</script>

当您希望在页面完全解析后执行脚本时,使用script标记中的defer属性。因此,只有在页面加载完毕并完全加载脚本后,才能使用加载的脚本。

答案 1 :(得分:1)

如果您在Laravel混音中使用private void signin1ActionPerformed(java.awt.event.ActionEvent evt) { user= username.getText().trim(); pass= password.getText().trim(); try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=xyz;integratedSecurity=true"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(" select id, password from signin where username='"+user+"' and password='"+pass+"' "); if(resultSet.next()){ new NewJFrame().setVisible(true); this.setVisible(false); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } ,请以这种方式导入jquery

app.js

答案 2 :(得分:0)

它说$尚未加载,因为您尚未加载jQuery。 使用Google CDN for jQuery。 只需添加jQuery的google cdn链接

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

@section('scripts')部分下的所有内容之前以及在脚本部分中的所有其他代码之前,应该在cdn之后,并且一切都可以正常工作。

答案 3 :(得分:0)

我在 laravel 中使用 jquery 也有同样的错误。我已经通过 npm npm install jquery 安装 jquery 解决了这个问题,然后我在我需要的脚本中导入了 jquery,如下所示:

import $ from "jquery";

然后 $ 将在 js 文件中可用。 之后,我在 entry-point.js 中调用了我的 js 文件并运行 npm run dev