jquery - 通过 Controller 方法的 $request 参数获取 $.ajax 发布的数据
问题描述
我正在使用以下代码将对象数组发布到 api 控制器。
$.ajax({
url: "/api/links",
method:"post" ,
data: JSON.stringify( this.results ) ,
contentType: 'application/x-www-form-urlencoded',
context:this ,
success:
function(res){
$("#res").html(res);
}
});
问题是 $_POST 数组是空的,而我可以使用 $raw = file_get_contents("php://input") 获取原始发布的数据。有人提出使用这个:
$_POST = json_decode($rawdata, true);
它可能会填充 $_POST 并解决问题,但我使用的是 Laravel,所以我应该使用 Controller 方法的 $request(请求类型)参数而不是纯 PHP。所以我认为有一种正确的 Laravel 方式来处理这个问题。
顺便说一句,$rawdata 正是我发布到控制器的内容,如下所示: [{"id":484,"LinkTitle":"contactus","URL":" https://url1 ... "},{"id":485,"LinkTitle":"faq","URL":"/faq"}]
我还尝试在序列化之前用 {} 包装它以使其成为对象:
JSON.stringify( {"myData":this.results} )
这样 $_POST 数组被填充但不是以正常方式。我想要的只是通过 $_POST 访问 LinkTitle,这意味着我可以使用传递给控制器方法的 $request 参数,这样我就可以做其他事情,比如验证等......
编辑:就像@AmeyaJoshi 说它是对象数组而不仅仅是对象/数组。所以我无法通过 $_POST["LinkTitle"] 得到它。我在这里所说的只是因为我想如果 $_POST 填充正确,那么我可以使用 $request 通过 eloquent 立即验证和保存我的记录。谢谢
EDIT2:我尝试像 katsarov 所说的那样删除 stringify 并且 print_r($_POST,true) 的结果是
Array
(
[undefined] =>;
)
dd($request->all()) 的结果是
array:1 [▼
"undefined" => null
]
解决方案
很简单 :)
- 不要对数据对象进行字符串化
- request()->get('LinkTitle') (或 $request 如果你在方法中有它)