Yii2 pajax и redirect, как сделать так чтоб редирект работал не перезагружая страницу пользователя?
Все оказалось гораздо легче. УРА РЕШЕНИЕ!Ё!Yii::$app->response->getHeaders()->set('X-PJAX-Url',Url::to(['wall/show','id' => 2]));
И отдаем сразу данные этой страницы этого контроллера wall/show PS в Laravel приблизительно также решается эта беда.
Что я побывал до этого
Я пробовал переопределить в наглую код библиотеки
метод
options.error = function (xhr, textStatus, errorThrown) {
var container = extractContainer("", xhr, options)
// Check redirect status code
var redirect = (xhr.status >= 301 && xhr.status <= 303)
// Do not fire pjax::error in case of redirect
if(redirect) {
var conteiner1 = xhr.getResponseHeader('X-PJAX-Container') || false; // этот заголовк я сам отправил
if(conteiner1){
pjaxReload($(conteinercontainer.url);
return false;
}
}
var allowed = redirect || fire('pjax:error', [xhr, textStatus, errorThrown, options])
if (redirect || options.type == 'GET' && textStatus !== 'abort' && allowed) {
locationReplace(container.url)
}
Это все работает но лезть в чужую либо мне не хочется....
Еще один способов глобальный
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var originalPromise = jqXHR.promise(),
newDefer = $.Deferred(function( defer ) {
defer.promise( jqXHR );
jqXHR.success = originalPromise.done;
jqXHR.error = defer.fail;
});
originalPromise.fail(function(xhr, textStatus, errorThrown) {
var isPajax = xhr.getResponseHeader('X-PJAX') || false;
var redirect = (xhr.status >= 301 && xhr.status <= 303);
if(redirect) {
var conteiner = xhr.getResponseHeader('X-PJAX-Container') || false;
var isPajax = xhr.getResponseHeader('X-PJAX') || false;
if(isPajax){
$.pajax.reload(conteiner , url);
return false;
}
}
});
});