使用AJAX调用从Symfony2控制器返回JSONP

时间:2012-10-01 09:40:28

标签: json symfony jsonp

我正在尝试从Symfony2返回JSONP。我可以很好地返回常规的JSON响应,但好像JSON响应类忽略了我的回调。

$.ajax({
        type: 'GET',
        url: url,
        async: true,
        jsonpCallback: 'callback',
        contentType: "application/json",
        dataType: 'jsonp',                      
        success: function(data) 
        {                                   
              console.log(data);
        },
        error: function() 
        {
            console.log('failed');
        }
        });   

然后在我的控制器中:

$callback = $request->get('callback');    
$response = new JsonResponse($result, 200, array(), $callback);
return $response;

我从中获得的响应始终是常规JSON。没有回调包装。

Json Response类在这里:

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/JsonResponse.php

2 个答案:

答案 0 :(得分:13)

正如文档所说:

$response = new JsonResponse($result, 200, array(), $callback);

您将回调方法设置为$headers参数。

所以你需要:

$response = new JsonResponse($result, 200, array());
$response->setCallback($callback);
return $response;

答案 1 :(得分:1)

JsonResponse的构造函数不接受回调参数。您需要通过方法调用来设置它:

$response = new JsonResponse($result);
$response->setCallback($callback);

return $response;