如果"pure content" AJAX 请求,那么其他参数来自哪里?



我不是专家,但是当我进行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()

最新更新