Laravel错误405(不允许方法)Ajax发布

时间:2019-03-07 09:13:42

标签: javascript ajax laravel

您好,我想使用ajax将数据发送到我的控制器。

我的代码

AJAX

  $.ajax( {
    type:'POST',
    header:{
      'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')
    },
    url:"{{route('race.post')}}",
    data:{
      _token: "{{ csrf_token() }}",
      dataType: 'json', 
      contentType:'application/json', 
    }


})
.done(function() {
    alert('success');
})
.fail(function() {
    alert("error");
});

CONTROLLER

 public function Points(Request $request){
    $test = $request->input('data');
    return "$test";
}

路线

Route::post('updateC', ['uses' =>'RacesController@Points', 'as' => 'race.post']); 

还有我得到的错误。

Console

Network-preview

Network-Response

8 个答案:

答案 0 :(得分:0)

由于您使用的是JavaScript文件而不是刀片的文件,因此route()帮助程序方法无效,并且路线'race.post'也未解析为url。

尝试将网址更改为此:

url: '/updateC'

当您想在JavaScript中使用route()帮助程序时,必须将脚本添加到Blade文件中,并用json_encode值,您可以在this answer中阅读有关此内容的更多信息。

答案 1 :(得分:0)

我有不同的使用方式: AJAX

data = {
        selectmanufacturer: selectmanufacturer,
        categories: selectCategory,
        _token: "{{csrf_token()}}",
        productName: productName
      };
     $.ajax({
        url: '{{URL::to('/all-products-data')}}',
        type: 'POST',
        dataType: 'json',
        data: data,
        success: function (response) {
        },
          error: function (response) {
            alert(response);
          }
        });

控制器:

public function Points(Request $request){
    $test = $request->all();
    return "$test";
}

希望对您有帮助

答案 2 :(得分:0)

您要发布的URL在您发布的控制台输出中看起来不正确。在您的AJAX代码中,您可以这样:

url:"{{route('race.post')}}"

但这只是按原样进行解释,不是被解释为Laravel中该路线的值。

如果要解析Blade标签,则需要确保JavaScript代码在Blade模板中。

答案 3 :(得分:0)

不键入:“ POST”,方法:“ POST”请尝试修改以下代码:ref:Reference Link HTML代码

<button onClick="onBtnClick()" data-url="{{route('race.post')}}"></button>

更新的代码

function onBtnClick(){
    var token = $('meta[name="csrf-token"]').attr('content');
    var url = $(this).attr("data-url");    
    $.ajax( {
        method:'POST',
        header:{
          'X-CSRF-TOKEN': token
        },
        url: url,
        data:{
          _token: token,
          dataType: 'json', 
          contentType:'application/json', 
        }        
    })
    .done(function() {
        alert('success');
    })
    .fail(function() {
        alert("error");
    });
}

答案 4 :(得分:0)

将此内容添加到您的layout.blade文件中

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

然后在您的js代码中使用此代码

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

我希望这会有所帮助!

答案 5 :(得分:0)

我刚刚删除了url末尾的斜杠,它开始起作用... /managers/games/id/push/至:

$http({
  method: 'POST',
  url: "/managers/games/id/push",

答案 6 :(得分:0)

第一件事是我们将两条路线放在一条中,以显示视图,而另一条路线用于发布ajax。如此简单,将两个路由都添加到您的路由文件中。

routes / web.php

Route::get('ajaxRequest', 'RacesController@Points');

Route::post('ajaxRequest', 'RacesController@Points');

在您的视图中包含此元标记

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

在ajax调用中包含javascript代码

$.ajaxSetup({

    headers: {

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

    }

}); 

答案 7 :(得分:0)

检查您的 Laravel 路由是否为此请求正确设置。 就我而言,我有一个 $.ajax url: "crop-image-upload" 和一个 Route::post('crop-image-upload ', 'CropImageController@uploadCropImage'); 但请求已发送至 http://127.0.0.1:8000/news/crop-image-upload 所以我不得不改变我的路线到Route::post('/news/crop-image-upload ', 'CropImageController@uploadCropImage');

因此,在您的情况下,尝试在 ajax 上添加一个文字 url,如下所示:

url:"/races/updateC"

并在路线中添加“races/”,如下所示:

Route::post('/races/updateC', ['uses' =>'RacesController@Points', 'as' => 'race.post']);