我不是专家,但是当我进行AJAX调用时,我希望收到(服务器端(我放入AJAX调用的data
参数的确切内容。
这正是我在 chrome 开发控制台>网络中看到的。
所以服务器端,我正在努力访问这些数据。 首先,gettype()
告诉我我正在接收一个对象,但它看起来像一个数组。
其次,如果我将其转换为数组,则所有其他垃圾都会被添加进来。
一个简单的Log::info($AJAXRequest)
显示已收到一个数组。
[2018-08-24 02:14:15] local.INFO: array (
0 =>
array (
'category' => 'xyz',
array (
0 =>
... etc.
在$arr = (array) $AJAXrequest;
一个简单的Log::info($arr);
显示之后,我有一个数组,前面添加了各种其他垃圾。
[2018-08-24 02:14:15] local.INFO: array (
'' . " " . '*' . " " . 'json' =>
SymfonyComponentHttpFoundationParameterBag::__set_state(array(
'parameters' =>
array (
0 =>
array (
'category' => 'xyz',
array (
0 =>
... etc.
这些额外的内容从何而来?我只是试图将我认为是对象的东西转换为数组。
Javascript中的AJAX调用:
$.ajax({
type:"POST",
url:"/surveys",
contentType: "application/json; charset=utf-8",
headers: {
'CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
data: JSON.stringify(data),
dataType: 'html',
success: function(data){alert("Success");},
failure: function(errMsg) {alert("Fail");}
});
}
资源控制器
...
public function store(Request $AJAXrequest)
...
if($AJAXrequest->ajax()){
$arr = (array) $AJAXrequest;
Log::info(gettype($AJAXrequest));
Log::info(gettype($arr));
.....
我认为最好向后工作以帮助解决您的误解......
Laravel 的IlluminateLogLogger
类通过内部方法运行所有日志消息formatMessage()
其中包括
if ($message instanceof Arrayable) {
return var_export($message->toArray(), true);
}
现在,Request
实现Arrayable
,因此它满足此条件,调用toArray()
方法
/**
* Get all of the input and files for the request.
*
* @return array
*/
public function toArray()
{
return $this->all();
}
这就是为什么你看到你为Log::info($AJAXrequest)
做了什么
现在,如果您刚刚在反序列化的 JSON 之后,则应在
$AJAXRequest->json()
返回一个ParameterBag
实例。
如果您追求发布的 JSON 字符串,请使用
$AJAXrequest->getContent()