pjax.reload in loop causes cancelled requests

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

pjax.reload in loop causes cancelled requests

Сообщение Bio man »

В цикле обновляю гриды, но обновляется только последний (на странице их несколько).
Вот как я это делаю:

Код: Выделить всё

$.post({
            url: $(this).attr('href'),
            data: {
                ids: $container.yiiGridView('getSelectedRows')
            },
            success: function () {
                $('.reminder-grid-container [data-pjax-container]').each(function () {
                    $.pjax.reload({container: $(this)});
                });
            }
});
И вот, что происходит в консоле: Изображение

Сами запросы приходят в бекенд.

Кто сталкивался? Подскажите.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: pjax.reload in loop causes cancelled requests

Сообщение urichalex »

Попробуйте pjax отправлять постом

Код: Выделить всё

$.pjax.reload({
	container: $(this),
	type: 'POST'
});
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: pjax.reload in loop causes cancelled requests

Сообщение Bio man »

Нет, ничего не изменилось.
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: pjax.reload in loop causes cancelled requests

Сообщение Bio man »

Очень жаль, что pjax не поддерживает асинхронную загрузку.
Ну что поделать, придется делать как тут http://stackoverflow.com/questions/3198 ... tiple-pjax
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: pjax.reload in loop causes cancelled requests

Сообщение Bio man »

Получилось как-то так.

Код: Выделить всё

$('.btn-remove-reminder').click(function (e) {
    e.preventDefault();

    var $gridContainer = $(this)
        .closest('.reminder-grid-container')
        .find('[data-krajee-grid]');

    var $activePjaxContainer = $gridContainer.parent();
    var $allPjaxContainers = $('.reminder-grid-container [data-pjax-container]');
    var $leftPjaxContainers = $allPjaxContainers.not($activePjaxContainer);

    $allPjaxContainers.on('pjax:end', function () {
        if ($leftPjaxContainers.length > 0) {
            var $container = [].pop.call($leftPjaxContainers);
            $.pjax.reload({container: $container});
        }
    });

    $.post({
        url: $(this).attr('href'),
        data: {
            ids: $gridContainer.yiiGridView('getSelectedRows')
        },
        success: function () {
            $.pjax.reload({container: $activePjaxContainer});
        }
    });
});
Логика такая.
Сперва обновляем текущую активную сетку, а потом обновляем следующую, когда обновление предыдущей закончилось.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: pjax.reload in loop causes cancelled requests

Сообщение urichalex »

А если указать global=false, async=true
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: pjax.reload in loop causes cancelled requests

Сообщение Bio man »

Код: Выделить всё

$allPjaxContainers.each(function () {
       $.pjax.reload({container: $(this), global: false, async: true});
});
Без результатов. Или я не там указываю настройки?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: pjax.reload in loop causes cancelled requests

Сообщение urichalex »

Завтра гляну в код пиджака. В документации сказано, что можно передавать параметры как для $.ajax
spavlov
Сообщения: 66
Зарегистрирован: 2011.07.29, 10:42

Re: pjax.reload in loop causes cancelled requests

Сообщение spavlov »

urichalex писал(а): 2017.04.01, 17:39 Попробуйте pjax отправлять постом

Код: Выделить всё

$.pjax.reload({
	container: $(this),
	type: 'POST'
});
ТС пишет "Нет, ничего не изменилось.", а мне это помогло, спасибо!
Ответить