2015-08-29 15 views
6

Sto usando il framework Yii2 con la loro implementazione di Pjax. Il codice del controller aggiunge un'intestazione "X-Pjax-Url" che è stata trasmessa con successo con la risposta.Reindirizzamento Yii2 e Pjax non funziona in Internet Explorer?

Il reindirizzamento per Pjax viene gestito correttamente con i metodi pjax.js in Chrome, Safari e Firefox, ma non riesce in IE11.

Quando utilizzo il debugger incluso e visualizzo le intestazioni di risposta, l'intestazione è lì e l'url è corretto, ma IE11 non lo sta leggendo.

L'errore di risposta: enter image description here

intestazioni di risposta: enter image description here

Tutte le idee?

** Aggiornamento 9/7/15

Il codice di controllo:

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

Ecco un link per la documentazione (yii\web\Controller) su come utilizzare questo metodo, che è una scorciatoia per questo (yii\web\Response) metodo.

Ancora una volta, questo funziona in Chrome, Safari e Firefox, solo non IE11.

Stavo usando questo snippet per verificare la risposta xhr, che restituisce 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; 
    } 
}); 

Nelle immagini di cui sopra, si può vedere l'intestazione viene effettivamente inviato, sembra proprio come se IE sta leggendo correttamente.

Il file Pjax.js gestisce effettivamente il reindirizzamento, stavo usando lo snippet solo a scopo di debug.

+0

dare il vostro codice di esempio – ankitr

+0

sarebbe utile se fornisci il tuo codice. – TheLuminor

+0

Scatto lungo, ma stiamo inseguendo un problema XHR che è stato interrotto solo in IE11 (e 10). Nella nostra situazione, la lettura si interrompe al trattino/trattino. Iniziato nelle ultime settimane. https: //social.msdn.microsoft.com/Forums/en-US/061721c1-68a5-4f38-83ec-d7e4b596cc1d/problem-parsing-xml-with-a-hyphen-in-ie11?forum=iewebdevelopment –

risposta

1

Posso verificare questo errore. Ma non ho idea se si tratta di un errore IE o di un errore yii2.

L'unica cosa che so è che il reindirizzamento funziona se non uso "return" e restituisco la vista normale in aggiunta al reindirizzamento che richiede il pjax. ad es. l'ho provato nella mia azione indice che mostra una griglia con pjax abilitato. Quindi reindirizzamento su una richiesta pjax (qui un ordinamento per una colonna) alla vista utente. (Tanto per fare un esempio)

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, 
    ]); 
} 

Perché l'avanti funziona se la vista normale è resa inoltre Credo che manca qualcosa (molto probabilmente alcuni header). Vorrei aprire un problema nel github yii2 e chiedere supporto.

Questo era per tutto. il problema in cui il reindirizzamento insieme pjax è stato cambiato https://github.com/yiisoft/yii2/issues/4395

edit: una soluzione rapida sarebbe quella di impostare il codice di stato 200 al posto di predefinito 302

if (Yii::$app->getRequest()->getIsPjax()) { 
    return $this->redirect(['user/view','id'=>1], 200); // forwards also in IE. 
} 
+0

Ho scoperto che se stai facendo un reindirizzamento con codice di stato 200 es 'return $ this-> redirect (['user/view', 'id' => 1], 200);' funziona anche in IE. Se si utilizza lo standard 302 non funziona in IE. Una cosa che può essere fatta, che su Pjax richiede che il codice di stato sia impostato su 200 anziché su 302 sui reindirizzamenti, quindi funzionerà anche in IE. Ma dovresti aprire un problema nel github yii2, quindi questo è controllato dagli sviluppatori. – BHoft

+0

Non ho mai pensato di provare un diverso codice di stato. Il codice potrebbe cambiare altri effetti collaterali? –

+0

Ho confermato che il codice di stato 200 funziona. Aprirò un problema laggiù. Il codice di stato –

Problemi correlati