Laravel 认为 jQuery 总是 GET 请求方法

Posted

技术标签:

【中文标题】Laravel 认为 jQuery 总是 GET 请求方法【英文标题】:Laravel thinks jQuery is always GET request method 【发布时间】: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/... 会不会和其他路由冲突? 【参考方案1】:

删除路径最后的名称。

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

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

【讨论】:

以上是关于Laravel 认为 jQuery 总是 GET 请求方法的主要内容,如果未能解决你的问题,请参考以下文章

api route laravel 总是返回错误 400

带有通配符的 Laravel 路由总是 404

Laravel 4 Auth::attempt() 总是返回 false

Laravel 5 中间件身份验证总是失败并重定向到登录

使用 axios 的 API 请求总是未经 Laravel API 授权

在jquery中循环laravel数组集合