ZF2 setJsonpCallback() returns 错误的内容类型(application/json 而不是 application/javascript)

ZF2 setJsonpCallback() returns wrong content-type (application/json instead of application/javascript)

我们正在使用 Zend Framework 2.4 进行开发,并且有一个 API 应该支持 jsonp 回调。

不幸的是,Chrome 不喜欢 returns 的内容类型。它是 application/json 但需要是 application/javascript。

return $jsonModel->setJsonpCallback($jsonpCallback);

有人知道这种情况下的 ZF2 错误吗?

干杯

不幸的是,JsonStrategy 没有查看 JsonModel 以获取 jsonp 回调。如果非要我猜的话,那是因为 JsonModel 没有公开 JsonModel::$jsonCallback 的值。 JsonStrategy 将查看渲染器,默认情况下为 JsonRenderer,用于 jsonp 回调并相应地应用 application/javascript 或 application/json 的内容类型。

在您的情况下,JsonRenderer 未设置 jsonp 回调,因此 JsonStrategy 返回 application/json 的内容类型。您可以通过从控制器访问 JsonRenderer 并设置 jsonp 回调值来更正此问题。

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        $jsonModel = new JsonModel();
        $jsonModel->setVariables(array(
            'ping' => 'pong',
        ));

        /** @var \Zend\View\Renderer\JsonRenderer $jsonRenderer */
        $jsonRenderer = $this->getServiceLocator()->get('ViewJsonRenderer');
        $jsonRenderer->setJsonpCallback('wakawaka');

        return $jsonModel;
    }
}