首页 > 解决方案 > 通过 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
]

标签: jqueryajaxlaravel

解决方案


很简单 :)

  • 不要对数据对象进行字符串化
  • request()->get('LinkTitle') (或 $request 如果你在方法中有它)

推荐阅读