使用Ajax在Laravel中的路线中找不到错误

时间:2018-08-09 06:22:28

标签: php ajax laravel laravel-5 routes

我正在使用Laravel 5.6,但出现错误:


  

哇,好像出了点问题。 (1/1)   MethodNotAllowedHttpException


以下是我的观点(leads / show.blade.php):

<form method="post" id="student_form">
    {{csrf_field()}}
    <span id="form_output"></span>
    <div class="form-group">
        <label>Choose Group for Your Lead</label>
        <select name="group_id" id="group_id" class="form-control">
            @foreach($groups as $group)
                <option value="{{$group->id}}"> {{$group->name}}</option>
            @endforeach
       </select>
       <input type="hidden" name="customer_id" id="customer_id" value="{{$lead->id}}">
   </div>
   <div class="modal-footer">
       <input type="hidden" name="student_id" id="student_id" value="" />
       <input type="hidden" name="button_action" id="button_action" value="insert" />
       <input type="submit" name="submit" id="action" value="Add" class="btn btn-info" />
       <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    </div>
</form>
  • Ajax请求和响应:
<script type="text/javascript">
           $(document).ready(function() {


               $('#student_form').on('submit', function(event){
                   event.preventDefault();
                   var form_data = $(this).serialize();
                   $.ajax({
                       url:"{{ route('leads.savegroup') }}",
                       method:"POST",
                       data:form_data,
                       dataType:"json",
                       success:function(data)
                       {
                           if(data.error.length > 0)
                           {
                               var error_html = '';
                               for(var count = 0; count < data.error.length; count++)
                               {
                                   error_html += '<div class="alert alert-danger">'+data.error[count]+'</div>';
                               }
                               $('#form_output').html(error_html);
                           }
                           else
                           {
                               $('#form_output').html(data.success);
                               $('#student_form')[0].reset();
                               $('#action').val('Add');
                               $('.modal-title').text('Add Data');
                               $('#button_action').val('insert');

                           }
                       }
                   })
               });

           });
       </script>

,路线是:

Route::post('leads/savegroup', 'LeadsController@savegroup')->name('leads.savegroup');

请帮助我找到错误。

5 个答案:

答案 0 :(得分:0)

尝试

url:"{{ url('leads/savegroup') }}"

而不是:

url:"{{ route('leads.savegroup') }}"

也许有用。

答案 1 :(得分:0)

您需要设置ajax.setup:

$.ajaxSetup
    ({
        headers:
            {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
    });

并在HTML中添加以下行:

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

因为Laravel在每个POST请求中都需要CSRF-TOKEN。

答案 2 :(得分:0)

检查您的路由文件。问题可能是与其他方法之前已经定义了相同名称的路由

答案 3 :(得分:0)

尝试用_method:“ POST”替换方法:“ POST”

答案 4 :(得分:0)

感谢您的帮助

实际上,我也解决了我的问题,问题也出在路线上。

但是让我从头开始,我遇到了什么错误阶段以及如何解决它:

首先:我尝试删除Ajax,并通过action =“ ...”正常运行该表单,一旦确保该表单运行正常,因此我进入下一阶段来检查Ajax。

第二:当我开始检查Ajax时,我发现Ajax运行良好,但是出现了问题,但错误仍然显示:

  

无法加载资源:服务器响应状态为500   (内部服务器错误)

因此,我在应用程序中打开“ laravel.log”,并检查了应用程序中的最新错误,发现该错误可能来自DB(SQL)或路由。因此,我开始检查控制器,并确保路由中也没有任何错误,因为我之前在其他页面中已经使用过它,并且效果很好。

因此,我最后一次检查路线的机会是问题所在。我还检查了我的路线,并在更改路线名称等之后很多次。我注意到我分为两组:

第一组:

Route::group(['prefix' => 'leads'], function () {
     Route::get('/getdata', 'Controller@getdata')->name('leads.getdata');
}

和第二个不带组的人,如下所示:

Route::get('leads/getdata', 'Controller@getdata')->name('leads.getdata');

所以这也是我的问题。一旦我将路线从小组的外部移动到小组内部>,它运作良好,问题也得到解决。

因此,归根结底,路线问题同样存在。

感谢您的帮助;)