我正在使用框架Yii2及其Pjax的实现。控制器代码添加了一个成功传递响应的标题“X-Pjax-Url”。
Pjax的重定向通过pjax.js方法在Chrome,Safari和Firefox中处理得很好,但在IE11中失败。
当我使用包含的调试器并查看响应头时,标题就在那里,并且url是正确的,但是IE11没有读取它。
有什么想法吗?
**更新9/7/15
控制器代码:
core
以下是有关如何使用此方法的文档(yii\web\Controller)的链接,该方法是此(yii\web\Response)方法的快捷方式。
再一次,这适用于Chrome,Safari和Firefox,而不是IE11。
我正在使用此代码段验证xhr响应,该响应返回null。
return $this->redirect(['secure/dashboard']);
在上面的图片中,您可以看到标题实际上正在发送,就好像IE正在正确读取它一样。
Pjax.js文件实际上处理重定向,我只是使用该代码段进行调试。
答案 0 :(得分:2)
我可以验证此错误。 但我不知道这是IE错误还是yii2错误。
我唯一知道重定向有效,如果我不使用"返回"并在执行pjax请求的重定向之外再渲染普通视图。 例如我在我的索引操作中测试了它,该操作显示了启用了pjax的网格。然后我将pjax请求(这里是列的排序)重定向到用户视图。 (仅作为示例)
public function actionIndex()
{
if (Yii::$app->getRequest()->getIsPjax()) {
//return $this->redirect(['user/view','id'=>1]); // doesn't forword in IE.
$this->redirect(['user/view','id'=>1]); // forwards also in IE.
}
$searchModel = new UserSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
因为如果正常视图另外渲染,前向工作,我猜想有些东西丢失了(很可能是一些标题)。我会在yii2 github中打开一个问题并寻求支持。
这是顺便说一句。重定向与pjax一起更改的问题https://github.com/yiisoft/yii2/issues/4395
编辑:快速解决方法是设置状态代码200而不是默认值302
if (Yii::$app->getRequest()->getIsPjax()) {
return $this->redirect(['user/view','id'=>1], 200); // forwards also in IE.
}