【问题标题】:Laravel is sending GET instead of POST requestLaravel 正在发送 GET 而不是 POST 请求
【发布时间】:2018-09-04 15:31:22
【问题描述】:

我对 Laravel 和 POST 请求有疑问。我的路由定义为 POST,AJAX 中使用的方法是 POST,但它一直在发送 GET 请求。如果我将路由更改为未定义的路由,那么它会发送 POST,但如果我将这个路由定义为 POST,它会发送 GET 请求。

AJAX:

$.ajax({
    method: "POST",
    url: "{{ url('admin/rentacar/save_availability_for_d') }}",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    data: $(form).serialize(),
    dataType: "json",
    success(result){
        //
    }
});

路线定义为:

Route::post('save_availability_for_d', [
    'as' => 'save_availability_for_d', 
    'uses' => 'RentacarController@saveCarAdjustment'
]);

CSRF 令牌包含在元标记中:

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

这是我尝试发送 AJAX 请求时控制台中发生的情况:

XHR finished loading: GET "http://www.carsrental.me/public/me/admin/rentacar/save_availability_for_d".

如果我在末尾仅附加一个随机字符以瞄准不存在的路线,就会发生这种情况

XHR failed loading: POST "http://www.carsrental.me/public/admin/rentacar/save_availability_for_dd".

【问题讨论】:

  • 你可能想看看 api 路由。制作网址/api/admin/rentacar/save_availability_for_d。这不是解决方案,但它更清洁。
  • 只有定义了api路由@SuperDJ才会这样,否则没有区别。

标签: php ajax laravel


【解决方案1】:

正如@Claymore 在上面的答案中指出的那样,这几乎总是您的服务器的配置方式以及您调用 API/路由的方式。如果服务器配置为仅允许 https(端口 443)请求,则任何 http(端口 80)POST 请求都将被服务器重定向到 https 并作为 get 请求接收。 这是我的主要问题,因为我们最近安装了 ssl 证书并且没有从我们的移动应用更改 API 调用协议,这导致了失败/不受欢迎的请求。

【讨论】:

  • 我不知道为什么这个答案被否决了!可能只是节省了我一整个晚上的工作,很好,我在这呆了几个小时。服务器正在发布到 www,我有重定向。
  • 有人可能没有仔细看这个答案,看不出它实际上不是我的副本,只是相似。我也不知道 SSL 证书会导致这种情况。所以-现在就继续并抵消该反对票。 (我知道潜在的报复是一个问题,但我仍然非常讨厌人们不对投票做出解释,尤其是对于新手。)
【解决方案2】:

这可能不是 Laravel 的事情。如果服务器配置有点偏离,我已经看到这种情况发生。发生的事情是站点设置为https,Apache 配置设置为重定向http,端口80,请求到端口443。但在此过程中,它丢失了请求方法(和 GET 参数)。

不确定这是您的确切问题,这是一种全有或全无的事情。但它可能值得一看。

【讨论】:

  • 正确,这是一个简单的 http \ https 问题。
  • 谢谢@kmuenkel 有一段时间我也发生了类似的事情,您的评论引发了一个想法,即在我的 REST API 客户端的基本 URL 上检查“HTTP”并修复它。感谢您的回答。
【解决方案3】:

试试这个,也不要忘记清除缓存

$.ajax({
      url: '{{route('save_availability_for_d')}}',
      dataType: 'json',
      type: 'POST',
      data: $(form).serialize(),
      success: function (result) {
      }
});

【讨论】:

  • 我忘了提,这也给出了相同的结果:GET 而不是 POST
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2021-10-12
  • 2012-05-06
相关资源
最近更新 更多