0

好吧,所以我正在使用 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');
                        }

                    });

所以我想做的是将数据发送到 calendar/events ,然后由 events 方法“捕获”,进行一些 DB 获取并将数据带回 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 =”部分。你怎么看?有没有办法可以用“data =”某种方式将数据对象“前缀”发送到 PHP 文件?我感谢所有的帮助

4

1 回答 1

2

jQuery API 文档说 $.ajax 的数据参数“被转换为查询字符串”。结果,json_decodeing它是没有用的。JSON.stringify如果您想发送 JSON 数据,您可能需要objectToSend先发送。如果这样做,您还应该设置适当的 Content-Type 标头。

显然 Yii 不会自己解码 JSON POST 正文,但根据PR 2059,您可以使用 PHPjson_decode或 Yii 的版本并使用Yii::app()->request->getRawBody().

我的猜测是您可能不想使用json_decode您的数据,而只是直接使用 POST 变量:

Yii::app()->request->getPost('categories');
于 2013-09-04T09:28:06.820 回答