【问题标题】:Laravel - How to include External JS file (contains Ajax )Laravel - 如何包含外部 JS 文件(包含 Ajax )
【发布时间】:2018-11-12 16:48:56
【问题描述】:

我使用 ajax 发布我选择的值。它适用于以下代码。 我想将 jvascript 文件与 index.blade.php 分开。

web.php

Route::get('Homepage', function (){
    return view('frontend.index');
});

Route::post('Homepage/filter', 'Frontend\ImgListController@filter')
    ->name('Homepage.filter');

控制器

function filter(Request $request)
    {    
        $get_Model = $request->get('Model');
        Log::debug($get_Model);    
    }

如果我的“查看”代码如下所示,所选值可以正确发布到 url:“{{ route('Homepage.filter') }}”。

index.blade.php

<html>
<head></head>    
<body>
   <div class="form-group">
      <select name="Model" id="Model">
         <option value="">Select Model</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
      </select>

      <button class="btn" onclick="Fun();">submit</button>

   </div>

   {{ csrf_field() }}

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

</body>
</html>

<script>
   function Fun() {
     if ($('#Model').val() != '') {
       var model_value = $('#Model').val();

       $.ajax({
         url: "{{ route('Homepage.filter') }}",
         type: "POST",
         data: {
             Model: model_value,
             _token: '{{csrf_token()}}'
         },
         success: function (result) {
         //
         }
       })    
     }    
  }
</script>

但是,当我尝试将 &lt;script type="text/javascript" src="{{ URL::asset('js/jquery.js') }}"&gt;&lt;/script&gt; 添加到 index.blade.php 中时,并且独立于 jvascript 文件 (public\js\JS.js)。 我会在下面收到错误消息。

POST http://localhost:8888/%7B%7B%20route('Homepage.filter')%20%7D%7D 404(未找到)

index.blade.php(已修改,有些地方有误)

<html>
<head></head>    
<body>
   <div class="form-group">
      <select name="Model" id="Model">
         <option value="">Select Model</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
      </select>

      <button class="btn" onclick="Fun();">submit</button>

   </div>

   {{ csrf_field() }}

   <script src="{{ asset('jquery/jquery.min.js') }}"></script>
   <script type="text/javascript" src="{{ URL::asset('js/JS.js') }}"></script>

</body>
</html>

javascript

function Fun() {
    if ($('#Model').val() != '') {
        var model_value = $('#Model').val();

        $.ajax({
            url: "{{ route('Homepage.filter') }}",
            type: "POST",
            data: {
                Model: model_value,
                _token: '{{csrf_token()}}'
            },
            success: function (result) {
                //
            }
        })
    }
}

路由 {{ route('Homepage.filter') }} 错了?还是别的什么?我能做些什么来纠正它?谢谢!

【问题讨论】:

    标签: javascript php laravel


    【解决方案1】:

    不能在 .js 文件中编写 laravel Blade 语法。

    所以你不能为 ajax url 提供直接的路由名称

    你可以直接把路由的URL调用这个。

    为了传递令牌数据,

    只需将令牌放在 html 头部内的元标记中

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

    然后你可以在你的js中附加令牌数据

    function Fun() {
        if ($('#Model').val() != '') {
            var model_value = $('#Model').val();
            var token = $('meta[name="csrf_token"]').attr('content'),
            $.ajax({
                url: "/Homepage/filter",
                type: "POST",
    
                data: {
                    Model: model_value,
                    _token: token 
                },
                success: function (result) {
                    //
                }
            })
        }
    }
    

    【讨论】:

    • $.ajax() 中似乎缺少“标题”?!在我添加headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, 之后,它就可以工作了。非常感谢!
    【解决方案2】:

    你可以这样做:

    将下面的行添加到您的主布局文件中。

    @stack('scripts')
    

    而不是将下面的脚本放在索引文件的末尾。

    @push('scripts')
         <script src="{{ asset('assets/js/JS.js')}}"></script>
    @endpush
    

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 2018-04-29
      • 2015-03-22
      • 2020-10-11
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多