【问题标题】:Laravel thinks jQuery is always GET request methodLaravel 认为 jQuery 总是 GET 请求方法
【发布时间】:2018-07-11 05:10:25
【问题描述】:

Laravel 认为 jQuery 正在发送一个 GET 请求,即使它不是。

我已通过request()->method() 函数确认了这一点。

控制器功能:

public function fields($vertical_id = null, $lead_id = null)
{
    echo request()->method();
}

jQuery:

$(document).on('change', '#vertical_id', function () {
    $.post('http://myapp.local/leads/fields/1/2', $(this).closest('form').serialize(), function (data) {
        console.log(data);
    });
});

路线:

Route::any('leads/fields/{vertical_id?}/{lead_id?}', 'LeadController@fields')->name('leads.fields');

请注意,我必须使用 any,因为当我尝试使用 post 时,它会抛出一个方法不允许的异常。每次我提出此请求时,我的控制台都会显示 GET

如何让 Laravel 意识到 jQuery 发送的是 POST 而不是 GET?

【问题讨论】:

  • 您确定它没有发送OPTIONS 请求吗?查看浏览器的 Network 控制台
  • 您是否有其他使用 get 方法声明的具有相同签名的路由?
  • 这很有趣。当我从 URL 中删除参数时,它现在认为它是一个 POST。我猜想在路由中使用条件参数会导致 Laravel 自动将请求更改为 GET。
  • 另外,我建议在客户端脚本中使用路径,而不是完全限定的 URL。它将避免潜在的跨域问题,并使您的应用程序可移植。例如$.post('/leads/...
  • 会不会和其他路由冲突?

标签: php jquery laravel request


【解决方案1】:

删除路径最后的名称。

Route::any('leads/fields/{vertical_id?}/{lead_id?}', 'LeadController@fields');

在 route.php 文件中尝试此代码

【讨论】:

    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2013-01-21
    • 2015-09-07
    • 2016-09-09
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    相关资源
    最近更新 更多