好吧所以我使用Yii并且需要将一些数据传递给名为events的控制器方法,我的jQuery ajax调用看起来像这样
var objectToSend = { "categories" : [selectedOption],"datefrom" : month + "" + year , "dateto" : month + "" + year};
$.ajax({
url: '<?php echo Yii::app()->createUrl('calendar/events'); ?>',
type: "POST",
data: objectToSend,
success: function(data) {
console.log(data);
},
error: function() {
console.log('failed');
}
});
所以我想做的是将数据发送到日历/事件,然后由事件方法“捕获”,执行一些数据库获取并将数据恢复到jQuery uppo成功。问题是,我总是会记录错误,并在执行操作时将消息(失败)发送到控制台。我从控制器方法返回一个空字符串,这很奇怪。我只是用简单的代码测试它,看起来像这样
public function actionEvents()
{
$data = json_decode(Yii::app()->request->getPost('data'),true); // assoc array is returned if second param is true
echo json_encode($data);
Yii::app()->end();
}
我猜测问题在于发送到没有data = {json data here}的方法的数据对象,但只有{json data here}没有“data =”部分。你怎么看?有没有办法我可以“数据对象”以某种方式“发送”到PHP文件的“前缀”? 我感谢所有的帮助
答案 0 :(得分:2)
jQuery API docs说$ .ajax的数据参数“被转换为查询字符串”。结果,json_decode
它是无用的。如果您要发送JSON数据,则可能需要先JSON.stringify
objectToSend
json_decode
。如果这样做,您还应该设置适当的Content-Type标头。
显然Yii不会自己解码JSON POST主体,但根据PR 2059,您可以使用PHP的Yii::app()->request->getRawBody()
或Yii版本,并使用json_decode
获取POST主体。
我的猜测是你可能不想Yii::app()->request->getPost('categories');
你的数据而只是直接使用POST变量:
{{1}}