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 请求方法的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4 Auth::attempt() 总是返回 false