【问题标题】:The POST method is not supported for this route. Supported methods: GET, HEAD. Trying to send data to controller using ajax此路由不支持 POST 方法。支持的方法:GET、HEAD。尝试使用ajax向控制器发送数据
【发布时间】:2021-04-04 06:06:10
【问题描述】:

我正在尝试使用 ajax 向控制器发送数据,但我得到 此路由不支持 POST 方法。支持的方法:GET、HEAD。 谁能告诉我我做错了什么?

在 web.php 中

Route::post('/fb', 'FormController@fb')->name('fb');

HTML:

<form method="POST" id="formfb" enctype="multipart/form-data" data-route="{{ route('fb') }}">
  <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <button id="fbbutton" type="submit" class="dropdown-item">Save</button>
</form>

JavaScript:

<script language="javascript">

  $('#formfb').on('submit', function(e){
    e.preventDefault();

    var w= <?php echo $resolution['width'] ;?>;
    var h= <?php echo $resolution['height'] ;?>;
     $("#picture").show();
html2canvas($('#picture'), {
width: w,
height: h
}).then(function(canvas) {
  var inputURI = canvas.toDataURL('image/png');   
  var binaryVal; 
  var inputMIME = inputURI.split(',')[0].split(':')[1].split(';')[0]; 
  if (inputURI.split(',')[0].indexOf('base64') >= 0) 
      binaryVal = atob(inputURI.split(',')[1]); 
  else
      binaryVal = unescape(inputURI.split(',')[1]); 
  var blobArray = []; 
  for (var index = 0; index < binaryVal.length; index++) { 
      blobArray.push(binaryVal.charCodeAt(index)); 
  } 
  var blobObject = new Blob([blobArray], { 
            type: inputMIME 
        }); 
        var formData = new FormData();
        formData.append("blob", blobObject, "blob");



        var route= $('#form-data').data();
        var form_data= $(this);
        $.ajax({
          type: 'POST',
          url: route,
          headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
         data: form_data.serialize(),
          success: function(Response){
            console.log(Response);
          }

}); 
})
</script>

路线列表:

!!!更新!!!

【问题讨论】:

  • 检查浏览器开发工具中的网络选项卡以查看通过 ajax 发出的请求。
  • 你是这个意思吗?请求 URL:localhost/MatchmakingForms/public/… 请求方法:POST 状态代码:405 方法不允许远程地址:[::1]:80 推荐人策略:strict-origin-when-cross-origin
  • 如果您在 ajax 请求之前执行console.log(route),它会记录什么
  • 它不记录任何东西。
  • @hcphoon 正在做某事,我认为您没有在 /fb 上提出请求,这就是不支持请求方法的原因。换句话说,route 变量似乎是问题所在。但要确保,您应该检查它是否返回预期值。

标签: javascript jquery ajax laravel post


【解决方案1】:

如果你想让你的url参数在AJAX请求中是动态的,你可以简单地做

$.ajax({
    type: 'POST',
    url: {!!route('fb')!!},
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    data: form_data.serialize(),
    success: function (Response) {
        console.log(Response);
    }
});

{!! &lt;PHP Code&gt; !!} 允许您将 PHP 传递到您的 JS 中

【讨论】:

  • @GabrijelBatista 现在有什么问题?
  • 同样的问题。并且控制台仍然只显示 POST 405 (Method Not Allowed)
  • 尝试对 url 进行硬编码,即url: '/fb'
  • 已经试过了。我还尝试仅为此 ajax 请求制作单独的脚本和函数,以查看脚本中是否有其他内容导致此问题但仍然是相同的问题。
  • 是的,我做到了,但还是一样。我注意到当出现错误时,我进入了我的网址: .../public/?_token=1neYEMeaiRhXLFq1JzjBRLI8OaMoGjoOcLYySWHu 但是当我在“/”和“?”之间添加“fb”时该错误表示不支持 GET 方法。支持的方法:POST
【解决方案2】:

注意:这个答案是经过长时间聊天的结果,其中很多东西都经过测试。

在对 Apache 和 PHP 的配置进行一些更改后,以下代码现在可以运行:

JavaScript / jQuery

<script type="application/javascript">
    function fb() {
        let id = "{{ $user['id'] }}";
        let email = "{{ $user['email'] }}";
        $("#picture").show();
        html2canvas($('#picture'), {
            width: {{ $resolution['width'] }},
            height: {{ $resolution['height'] }}
        }).then(function (canvas) {
            let imgData = canvas.toDataURL('image/png');
            $.ajax({
                type: "POST",
                url: '{{ route('fb') }}',
                dataType: 'text',
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                data: {
                    base64data: imgData,
                    userid: id,
                    useremail: email
                }
            });
            let imgsrc = document.getElementById("imgfb").src;
            window.open("https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(imgsrc), "pop", "width=600, height=400, scrollbars=no");
        })
    }
</script>

PHP

Route::post('/fb', 'FormController@fb')->name('fb');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2019-08-31
    • 2021-05-05
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多