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;
}
}
我们正在使用 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;
}
}