从jQuery .ajax调用向PHP发送数据的问题

时间:2013-09-04 09:12:21

标签: php javascript jquery ajax yii

好吧所以我使用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文件的“前缀”? 我感谢所有的帮助

1 个答案:

答案 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}}