Laravel 5.6中的405错误

时间:2018-08-27 06:56:51

标签: php laravel routing

im使用laravel 5.6通过Ajax将表单数据发送到服务器 当将数据发送到服务器时,我已经指定了ajax的POST方法和web.php中的路由方法也要发布,问题是,ajax使用GET方法而不是POST发送表单数据。我应该改变什么??

ajax代码

var form = $('#personPersonalInfoForm')[0];
var formData = new FormData(form);

$.ajax({
    url:"/addNewPerson",
    Type: "POST",
    data: formData,
    contentType: false,
    processData: false,
    success: function(data)
    {
        alert(data);
    }
});

web.php代码

Route::post('/addNewPerson', 'adminController@addNewPerson');

2 个答案:

答案 0 :(得分:1)

这里是使用FormData的工作代码示例。 使用“方法” 配置而不是“类型”

var form = document.getElementById("ajaxForm");
var formData = new FormData(form);
var url = form.action;
$.ajax({
    method : 'POST',
    url : url,
    data : formData,
    contentType: false,
    processData: false
}).done(function (data) {
    console.log(data);
}).error(function (data) {
    console.log(data);
});

不要忘记在表单中添加CSRF令牌。

<form method="POST" action="/addNewPerson" id="ajaxForm">
    @csrf
    ...
</form>

或者从头开始配置ajax方法。

添加

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

并在JavaScript中添加

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

答案 1 :(得分:0)

web.php

Route::post('/addNewPerson', 'adminController@addNewPerson')->name(admin.add_new_person);

在您的adminController中:

public function addNewPerson(Request $request){
   // you can check request parameters
   //return response()->json($request->all());

   // add new person code here ...

   return response()->json(array('status'=>'success','message'=>'person added'));
}

您的ajax代码应为:

$.ajax({
    url:"/addNewPerson",
    type: "POST",
    data:$('#personPersonalInfoForm').serialize(),
    dataType:'json',
    contentType: 'application/json',
    success: function(data)
    {
        alert(data);
    }, 
    error:function(){
       alert('ERROR');
    }
});