[英]Can't find the error in my route in Laravel with Ajax
我正在使用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>
<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');
请帮助我找到错误。
尝试
url:"{{ url('leads/savegroup') }}"
代替 :
url:"{{ route('leads.savegroup') }}"
也许行得通。
您需要设置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。
检查您的路由文件。问题可能是与其他方法之前已经定义了相同名称的路由
尝试用_method:“ POST”替换方法:“ POST”
谢谢你的帮助
实际上,我也解决了问题,问题也出在路线上。
但是,让我从头开始,我面对什么错误阶段以及如何解决它:
首先:我尝试删除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');
所以这也是我的问题。 一旦我将路线从小组的外部移动到小组内部>,它运作良好,问题也得到解决。
因此,归根结底,路线问题也是如此。
感谢您的帮助;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.