【问题标题】:Laravel error 405(Method Not Allowed) Ajax PostingLaravel 错误 405(不允许方法)Ajax 发布
【发布时间】:2019-07-29 02:46:38
【问题描述】:

您好,我想用 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");
});

控制器

 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

【问题讨论】:

  • 我认为您有单独的 .js 文件用于 ajax。这就是您的路线和 csrf_token 不起作用的原因。
  • 没错,我有用于 ajax 的 separetad js 文件。
  • 这就是为什么它不起作用。对于 csrf_token 使用元标记。对于 url,将 url 作为参数传递给 javascript onclick 或 Onchange 函数。当 ajax 调用时,我可以看到你的 .js 文件吗?
  • 试试我的回答如下。我已经通过比较您以前和当前的问题更改了代码。

标签: javascript ajax laravel


【解决方案1】:

由于您正在处理 JavaScript 文件而不是 Blade 文件,因此 route() 辅助方法不起作用,并且路由“race.post”未解析为 url。

尝试把网址改成这样:

url: '/updateC'

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

【讨论】:

  • 当我用这种方式url: '/updateC'它只是说方法405(方法不允许)。
  • 尝试运行php artisan route:list 并将路由与控制台/网络选项卡中的路由进行比较。将 ajax 调用中的路由调整为路由列表中显示的路由。
  • 它说要使用createPoints,但是当我使用它时,错误是419(未知状态)。
  • @Patrik 从你之前的问题中检查我的回答(评论)。
  • 很好,这意味着这个问题已经解决。 419 表示csrf_token 错误。您的刀片文件中是否存在此元标记:<meta name="csrf-token" content="{{ csrf_token() }}">?如果 jQuery 找到 csrf 令牌的值,请尝试记录。
【解决方案2】:

我有不同的使用方式: 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";
}

希望对你有帮助

【讨论】:

  • 我试了下,发现url 404(未找到)。
【解决方案3】:

您发布的 URL 在您发布的控制台输出中看起来不正确。在你的 AJAX 代码中,你有这个:

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

但这只是被解释为原样,它没有被解释为 Laravel 中该路由的值。

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

【讨论】:

  • 我认为他有单独的 js 文件,这就是 csrf_token 和 url 不起作用的原因。
  • 是的,这就是为什么我说@Patrik 需要确保 JavaScript 代码在 Blade 模板中。
【解决方案4】:

not type: "POST", method :'POST" 试试下面我修改过的代码。参考: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");
    });
}

【讨论】:

    【解决方案5】:

    在你的 layout.blade 文件中添加这个

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

    然后在你的js代码中使用这个

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

    我希望这会有所帮助!

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • 天啊,这就是发生在我身上的事情!我不敢相信我已经浪费了 3 个小时来寻找错误!谢谢!
      • 非常感谢 Harry,我在过去半小时内一直在寻找解决方案。它奏效了
      • 当您的服务器配置与 laravel 代客配置不同时,此解决方案可能有效。我的端点在代客托管的本地环境中运行良好,即使最后有“/”但在 cloudflare 后面的 serverpilot 部署中,它因 405 而失败。
      【解决方案7】:

      首先,我们将两条路由放在一个用于显示视图,另一个用于发布 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')
      
          }
      
      }); 
      

      【讨论】:

        【解决方案8】:

        检查您的 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"
        

        并像这样在路线中添加“比赛/”:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-19
          • 2018-01-25
          • 1970-01-01
          • 2015-08-25
          • 2017-05-31
          • 2018-03-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多