我正在向服务器发送ajax post请求,发布json数据。在firebug中,我可以看到网络发布呼叫以及json数据。
在Laravel中,我试图对$_POST
数据执行简单的var转储,并且浪费了相当多的时间来混淆为什么这应该是完全空的。但是,当我使用Request facade时,我的数据就在那里。
即。这只是给我一个空数组:
public function test(){
Log::info($_POST);
}
......然而,正如我所料,这会打印我的数据:
public function test(Request $request){
Log::info($request->all());
}
为什么?
修改
谢谢,@ Webdesigner。 http动词肯定是post
,因为我的路径文件中通过
Route::post('/image-upload', 'EntryController@test'); // Note "post" verb
我不认为$request->post()
在Laravel 5.4中有效,因为这会引发BadMethodCallException: Method post does not exist.
错误。但是,我可以确认
Log::info($request->method()); // POST
还告诉我该方法已发布。
很奇怪。我猜你是对的,应用程序的某些部分会覆盖$ _POST全局,但我不知道为什么/在哪里/如何。可能不相关,但这个电话是从Angular 4发出的。
无论如何,谢谢你的帮助!
答案 0 :(得分:0)
这不是Laravel的正常行为。我在一个新的Laravel 5.5站点上对此进行了测试,只是在同一条路线上进行了表单提交和Ajax POST请求。
两者都给我相同的结果。 POST请求至少应具有_token
的CSRF令牌,其值为。
另外一点$request->all()
不仅仅是$_POST
的内容,因此您应该尝试$request->post()
进行公平的压缩。
BTW只是因为你做了一个POST请求并不意味着数据是由POST方法发送的,可能是你在$request->all()
中看到的数据来自$ _GET和$ _COOKIE等,而且只有方法是一个POST。
最后但并非最不重要的是,您的APP的某些部分正在删除超全局变量的内容。 $_POST
和其他的不是常量,因此可以在运行时更改它们,例如$_POST = []
;
我不喜欢Laravel 5.4.27中存在差异。