Yii2 和 Pjax 重定向在 Internet Explorer 中不起作用?

Yii2 and Pjax redirect not working in Internet Explorer?

我正在使用 Yii2 框架及其 Pjax 实现。控制器代码添加了一个 header "X-Pjax-Url" ,它随响应成功传递。

Pjax 的重定向通过 pjax.js 方法在 Chrome、Safari 和 Firefox 中处理得很好,但在 IE11 中失败。

当我使用包含的调试器并查看响应 headers 时,header 在那里并且 url 是正确的,但 IE11 没有读取它。

响应错误:

响应header:

有什么想法吗?

** 2015 年 9 月 7 日更新

控制器代码:

return $this->redirect(['secure/dashboard']);

这是文档 (yii\web\Controller) on how to use this method which is a shortcut to this (yii\web\Response) 的 link 方法。

再次强调,这适用于 Chrome、Safari 和 Firefox,但不适用于 IE11。

我正在使用此代码段来验证 xhr 响应,returns 为空。

// pjax complete
$(document).on('pjax:complete', function (event, xhr, textStatus, options) {
    alert(JSON.stringify(xhr));
    var url = xhr.getResponseHeader('X-Pjax-Url');
    if (url) {
        window.location = url;
    }
});

在上面的图片中,您可以看到 header 实际上正在发送,看起来好像 IE 正在正确读取它。

Pjax.js 文件实际上处理了重定向,我只是将代码片段用于调试目的。

我可以验证这个错误。 但我不知道这是 IE 错误还是 yii2 错误。

我唯一知道的是,如果我不使用 "return" 并且将普通视图附加到执行 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,
    ]);
}

因为如果额外呈现普通视图,前向工作我猜想缺少一些东西(很可能是一些 headers)。我会在 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.
}