2015-08-29 3 views
6

Я использую структуру Yii2 с их реализацией Pjax. Код контроллера добавляет заголовок «X-Pjax-Url», который успешно передается с ответом.Перенаправление Yii2 и Pjax не работает в Internet Explorer?

Редирект для Pjax обрабатывается с помощью методов pjax.js, которые отлично подходят для Chrome, Safari и Firefox, но не работает в IE11.

Когда я использую включенный отладчик и просматриваю заголовки ответа, заголовок находится там, и URL-адрес верен, но IE11 его не читает.

Ошибка ответа: enter image description here

Заголовки ответа: enter image description here

Любые идеи?

** Обновление 9/7/15

код контроллера:

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

Вот ссылка на документы (yii\web\Controller) о том, как использовать этот метод, который является ярлык для этого (yii\web\Response) способ.

Снова это работает в Chrome, Safari и Firefox, а не в IE11.

Я использовал этот фрагмент, чтобы проверить ответ xhr, который возвращает null.

// 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; 
    } 
}); 

В изображениях выше, вы можете увидеть заголовок на самом деле отправляется, это только кажется, что IE читает его надлежащим образом.

Файл Pjax.js фактически обрабатывает перенаправление, я просто использовал этот фрагмент для целей отладки.

+0

дайте свой образец кода – ankitr

+0

было бы полезно, если вы предоставите код. – TheLuminor

+0

Длинный выстрел, но мы преследуем проблему XHR, которая только сломана в IE11 (и 10). В нашей ситуации чтение отключается в дефис/тире. Началось в последние несколько недель. https: //social.msdn.microsoft.com/Forums/en-US/061721c1-68a5-4f38-83ec-d7e4b596cc1d/problem-parsing-xml-with-a-hyphen-in-ie11?forum=iewebdevelopment –

ответ

1

Я могу проверить эту ошибку. Но у меня нет подсказки, если это ошибка 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, 
    ]); 
} 

Поскольку вперед работает, если нормальный вид оказывается дополнительно я думаю, что-то не хватает (скорее всего, некоторые заголовки). Я бы открыл вопрос в giiub yii2 и попросил о поддержке.

Это было кстати. вопрос, где редирект вместе с 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. 
} 
+0

Я узнал, что если вы делаете перенаправление с кодом состояния 200, например 'return $ this-> redirect (['user/view', 'id' => 1], 200);' он работает и в IE. Если вы используете стандартный 302, он не работает в IE. Одна вещь, которую можно сделать, что на Pjax запрашивает, чтобы код статуса был установлен на 200 вместо 302 при переадресации, тогда он будет работать и в IE. Но вы должны открыть проблему в giiub yii2, чтобы это было проверено dev. – BHoft

+0

Я никогда не думал попробовать другой код состояния. Будет ли изменение кода иметь другие побочные эффекты? –

+0

Я подтвердил, что код состояния 200 работает. Там я открою вопрос. –

Смежные вопросы