Symfony控制器中的json_decode?

时间:2013-09-30 09:49:46

标签: php json symfony

我有一系列标签,我想在Instagram上测试它们以获得media_count。然后我想将我得到的数据发送到我的symfony控制器。此代码正常工作,我在Success函数中触发了警报。

for (var i = 0; i < 1; i++) {
    var tagname = tags[i];      
    var url = "https://api.instagram.com/v1/tags/" + tagname + "?client_id=" + clientID;
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        cache: false,
        url: url,
        success: function (res) { 
            var data = "{'name':'" + res.data.name + "','count':'" + res.data.media_count + "'}";
            $.ajax({  
                type: "POST",  
                url: controller-url, 
                data: data,
                success: function(response) {
                    alert(data);

                }
            });             
        }
    });     
}   

然后我使用this答案中的解决方案解码我在控制器中的数据,如下所示:

public function createAction(Request $request) {
    $params = array();
    $content = $this->get("request")->getContent();
    $params = json_decode($content, true); // 2nd param to get as array
    ...
} 

但是当我尝试将$ params发送到模板时,它是空的。为什么这样,我做错了什么?

2 个答案:

答案 0 :(得分:2)

迟了2年,但今天我遇到了同样的问题,并发现了这个悬而未决的问题:

在您的回调函数中,假设您的数据已正确字符串化(看起来如此),您忘记指定contentType:"application/json"

success: function (res) {
    var data = "{'name':'" + res.data.name + "','count':'" + res.data.media_count + "'}";
        $.ajax({  
            type: "POST",
            contentType : 'application/json',
            url: controller-url, 
            data: data,
            success: function(response) {
                alert(data);

            }

否则,在您的Symfony控制器中,如果您返回:

$req->headers->get("Content-Type")

...您将看到它已使用默认x-www-form-urlencoded

发送

希望将来帮助某人。

答案 1 :(得分:1)

我看了这个:

public function createAction(Request $request) {
    $params = array();
    $content = $this->get("request")->getContent();
    $params = json_decode($content, true); // 2nd param to get as array
   ...
}

问题是你没有从createAction函数中获取$ request。

public function createAction(Request $request) {
    $params = array();
    $content = $request->getContent();
    if (!empty($content)) {
        $params = json_decode($content, true);
    }
   ...
}

现在您将从$ request获取JSON内容。

干杯!