如何在laravel中解决Ajax post request show 500(内部服务器错误)

时间:2018-03-23 14:47:44

标签: javascript jquery ajax laravel

在我的项目中,我想使用ajax将数据存储到数据库中,但是当我提交帖子请求时,它显示错误,如(500(内部服务器错误))我谷歌它几次,但仍然是相同的问题 这是我的ajax代码

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

$('#form-insert').on('submit', function(e){
          e.preventDefault();
          var data = $(this).serialize();
          var url = $(this).attr('action');
          var post = $(this).attr('method');
          $.ajax({
            type: post,
            url: url,
            data:{
                   _token: '{!! csrf_token() !!}',
                   data
                 },
            dataType: 'json',
            success:function(data){
              console.log(data)
            }
          })
        })

这是我的观点

<form method="post" id="form-insert" action="{{ URL::to('item/store')}}">
    <div class="form-group">
      <label for="name">Name</label>
      <input type="text" class="form-control" name="name">
    </div>
     <div class="form-group">
      <label for="text">Email address:</label>
      <input type="email" class="form-control" name="email">
    </div>
    <div class="form-group">
      <label for="contact_no">Contact No:</label>
      <input type="text" class="form-control" name="contact_no">
    </div>
    <button type="submit" class="btn btn-primary pull-right" id="add">Submit</button>
  </form>

这是我的路线

Route::post('/item/store', 'AjaxCrudController@store');

这是我的控制器

public function store(Request $request)
    {
        if($request->ajax()){
            $item = AjaxCrud::create($request->all());
            return response($item);
            //return response($request->all());
        }
    }

1 个答案:

答案 0 :(得分:0)

您正在尝试在ajax请求中插入您提交的数据:

data:{
   _token: '{!! csrf_token() !!}',
   data
}

这意味着您正在尝试创建包含两个密钥的AjaxCrud资源:_tokendata。我想你只想存储data对象中包含的数据,这是你的序列化形式,应该包含name属性。

所以你有多个解决方案,第一个是从数据对象创建AjaxCrud资源:

$item = AjaxCrud::create($request->get('data'));

另一种解决方案是仅在ajaxRequest中发送您想要的数据,并将CSRF令牌设置为请求的标头。