Помогите с renderAjax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Помогите с renderAjax

Сообщение rosolovsky »

Здравствуйте.
Есть у меня вьюшка в которой рендерится корзина. Я удаляю из корзины товар, идет аякс запрос в екшн с id удаляемого товара, товар корректно удаляется и теперь надо аяксом обновить вьюшку корзины.

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

public function actionRemove()
    {
        $id = Yii::$app->request->get('id');
        Yii::$app->cart->remove($id);
        return $this->renderAjax('index');
    }
Но return возвращает обновленную вьюху в success калбек функцию js скрипта

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

$('.del-item').on('click', function(e) {
    e.preventDefault();
    var id = $(this).data('id');
    $.ajax({
        url: '/cart/remove',
        data: {id: id},
        type: 'GET',
        success: function(res) {
            $('.cart').html(res);
        },
        error: function(){
            alert('Ошибка!');
        }
    });
});
Теперь получается что в елементе cart, я опять отрисовал елемент cart. Фигня получается.
И никак не допру как мне правильно отрендерить аяксом вьюху корзины с учетом изменений после удаления товара?
pavlm
Сообщения: 84
Зарегистрирован: 2013.09.02, 16:33

Re: Помогите с renderAjax

Сообщение pavlm »

Можно попробовать .replaceWith вместо .html
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Re: Помогите с renderAjax

Сообщение rosolovsky »

.replaceWith - работает, но запрос отрабатывает только один раз! А далее никакой реакции на удаление товара не происходит.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Помогите с renderAjax

Сообщение someweb »

Значит у вас обработчик висит на корзине, повесьте на document. $(document).on(...)
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Re: Помогите с renderAjax

Сообщение rosolovsky »

Обработчик висит на кнопке удалить товар, кнопка находится в корзине с классом .cart.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Помогите с renderAjax

Сообщение someweb »

Ну а я что пишу? Вешайте на document.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Re: Помогите с renderAjax

Сообщение rosolovsky »

А почему так не работает?
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Помогите с renderAjax

Сообщение someweb »

Обработчик вешается один раз, а вы перезаписываете элемент DOM с обработчиком на элемент без обработчика, поэтому надо либо вешать выше, либо вешать каждый раз после перезаписи элемента.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Re: Помогите с renderAjax

Сообщение rosolovsky »

Я так и думал что replaceWith затирает обработчик.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Помогите с renderAjax

Сообщение andku83 »

replaceWith - не он затирает.
новый хтмл, который появляется после аджакс просто не имеет обработки событий.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Помогите с renderAjax

Сообщение urichalex »

Pjax зло. Обновление dom - зло.
Принимаете от сервера json и формируете в зависимости от него dom.
Хотя обработчики все равно нужно вешать выше обновляемого dom
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Re: Помогите с renderAjax

Сообщение rosolovsky »

Может VUE уже начать прикручивать? :)
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Помогите с renderAjax

Сообщение urichalex »

rosolovsky писал(а): 2018.04.29, 09:43 Может VUE уже начать прикручивать? :)
Искренне рекомендую)
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Помогите с renderAjax

Сообщение chesar »

urichalex писал(а): 2018.04.29, 02:15 Обновление dom - зло.
Расскажи это ментейнерам реакта, vue, и далее по списку.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Помогите с renderAjax

Сообщение urichalex »

chesar писал(а): 2018.04.29, 19:25
urichalex писал(а): 2018.04.29, 02:15 Обновление dom - зло.
Расскажи это ментейнерам реакта, vue, и далее по списку.
Я имел ввиду обновление аяксом
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Помогите с renderAjax

Сообщение chesar »

urichalex писал(а): 2018.04.29, 21:01
chesar писал(а): 2018.04.29, 19:25
urichalex писал(а): 2018.04.29, 02:15 Обновление dom - зло.
Расскажи это ментейнерам реакта, vue, и далее по списку.
Я имел ввиду обновление аяксом
С сервера пришли данные. Фронт их обновил. Какая разница html, это или json, xml, ... ?
Только в удобстве работы.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Помогите с renderAjax

Сообщение urichalex »

chesar писал(а): 2018.04.30, 08:30
urichalex писал(а): 2018.04.29, 21:01
chesar писал(а): 2018.04.29, 19:25
Расскажи это ментейнерам реакта, vue, и далее по списку.
Я имел ввиду обновление аяксом
С сервера пришли данные. Фронт их обновил. Какая разница html, это или json, xml, ... ?
Только в удобстве работы.
Какая разница, где собирать html? на сервере или взять темплейт, заполнить данными и вывести
pavlm
Сообщения: 84
Зарегистрирован: 2013.09.02, 16:33

Re: Помогите с renderAjax

Сообщение pavlm »

Рендерить на сервере гораздо надежнее, на клиенте не всегда может сработать скрипт, тот же vue не поддерживает старые браузеры.
Не понял в чем зло pjax?
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Помогите с renderAjax

Сообщение chesar »

urichalex писал(а): 2018.04.30, 10:35
chesar писал(а): 2018.04.30, 08:30
urichalex писал(а): 2018.04.29, 21:01

Я имел ввиду обновление аяксом
С сервера пришли данные. Фронт их обновил. Какая разница html, это или json, xml, ... ?
Только в удобстве работы.
Какая разница, где собирать html? на сервере или взять темплейт, заполнить данными и вывести
Так и я об этом. Дом то в любом случае перерендерить
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Помогите с renderAjax

Сообщение urichalex »

chesar писал(а): 2018.05.01, 01:59
urichalex писал(а): 2018.04.30, 10:35
chesar писал(а): 2018.04.30, 08:30
С сервера пришли данные. Фронт их обновил. Какая разница html, это или json, xml, ... ?
Только в удобстве работы.
Какая разница, где собирать html? на сервере или взять темплейт, заполнить данными и вывести
Так и я об этом. Дом то в любом случае перерендерить
Дело не в рендере, а в передаче данных. Когда от сервера приходит тонна html
Ответить