@hollanditkzn

Как убрать несколько запросов в ajax?

Я использую ajax во yii2. Я реализовал что когда в gridciew нажимаешь, выходит блок, там можно просмотреть как сам заказ, так и можно нажать на редактирование и переходит внутри блока на редактирование. c83897393b3a4b2fa5d8a894effbd620.png
f93c265e42044ccc98069394ef2259e2.pngТолько когда много делаешь редактирование и опять нажать на другую строку чтобы она раскрылась, то выходит слишком много запросов и позже тормозит и некорректно работает. Выходит еще предупреждение
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

В файле _zakazold где хранятся данные то вот ajax запрос
<?php $this->registerJs('$("body").on("click", "#edit", function(){//нажал на кнопку редактировать, происходит событие
           var key = $(this).data("key");//получаем id заказа
           console.log(key);
        $.ajax({
            url: "'.Url::toRoute(['zakaz/zakazedit']).'?id="+key,//переводим страницу _zakazedit
            success: function(html){
                $(".view-zakaz").html(html);
            }
        })
    });') ?>

<?= Html::button('Редактировать', ['id' => 'edit', 'data-key' => $model->id_zakaz]) ?>

При этом код у меня выглядит таким
<?php $this->registerJs('
$("body").on("click", "#view", function(){//переводит ползователя на просмотр заказа
           var key = $(this).data("key"); //получает id заказа от data-key
        $.ajax({
            url: "'.Url::toRoute(['zakaz/zakazold']).'?id="+key, // открывает данную страницу просмотра _zakazold
            success: function(html){
                $(".edit-zakaz").html(html);
            }
        })
    });
    $("body").on("click", "tr", function(){//если была нажата на другую строку, то информация меняется на другие данные, но есть проблема, то что куда бы не нажал в блоке, но все равно открывает страницу _zakazold
        var key = $(this).data("key");//получаем id заказа
        $.ajax({
            url: "'.Url::toRoute(['zakaz/zakazold']).'?id="+key,
            success: function(html){
                $(".edit-zakaz").html(html);
            }
        })  
    })
    ') ?>
<?php $form = ActiveForm::begin(); ?>
....
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary']) ?>
    <?php ActiveForm::end(); ?>
    <?= Html::button('Вернуться', ['id' => 'view', 'data-key' => $models->id_zakaz]) ?>

В контроллере
public function actionZakazedit($id){

        $models = $this->findModel($id);
        if($models->load(Yii::$app->request->post()) && $models->save()){
            return $this->redirect(['admin']);// если было нажата кнопка сохранить , то сохраняется данные и редирект на странbцу admin
        } else {
        return $this->renderAjax('_zakazedit', ['models' => $models]);//иначе открывает внутри блока страницу _zakazedit 
        }
    }

    public function actionZakazold($id){

        $model = $this->findModel($id);
            return $this->renderAjax('_zakazold', ['model' => $model]);
    }

Как исправить данную проблему, то есть там может быть такое кол-во запросов 1, 3, 5, 10, 15, 25. И так далее и потом уже начинает тормозить сайт
Вот запросы в дебаге yii2
frontend/web/zakaz/zakazold?id=42 135 ms 593a9a293f108
GET 200 /frontend/web/zakaz/zakazold?id=42 85 ms 593a9a29671b1
GET 200 /frontend/web/zakaz/zakazedit?id=42 106 ms 593a9a2a7f4a8
GET 200 /frontend/web/zakaz/zakazedit?id=42 217 ms 593a9a2aa13a8
GET 200 /frontend/web/zakaz/zakazedit?id=42 355 ms 593a9a2aa13a8
GET 200 /frontend/web/zakaz/zakazedit?id=42 386 ms 593a9a2aa84f2
GET 200 /frontend/web/zakaz/zakazedit?id=42 278 ms 593a9a2aa32e9
GET 200 /frontend/web/zakaz/zakazedit?id=42 357 ms 593a9a2abc92e
GET 200 /frontend/web/zakaz/zakazedit?id=42 349 ms 593a9a2acf5fb
GET 200 /frontend/web/zakaz/zakazedit?id=42 354 ms 593a9a2adc11e
GET 200 /frontend/web/zakaz/zakazold?id=42 176 ms 593a9a2a869da
GET 200 /frontend/web/zakaz/zakazold?id=42 248 ms 593a9a2a8bfcb
GET 200 /frontend/web/zakaz/zakazold?id=45 117 ms 593a9a2bde480
GET 200 /frontend/web/zakaz/zakazold?id=45 456 ms 593a9a2c1af8b
GET 200 /frontend/web/zakaz/zakazold?id=45 189 ms 593a9a2c15d82
GET 200 /frontend/web/zakaz/zakazold?id=45 152 ms 593a9a2c0e080
GET 200 /frontend/web/zakaz/zakazold?id=45 256 ms 593a9a2c178da
GET 200 /frontend/web/zakaz/zakazold?id=45 418 ms 593a9a2c103a8
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
На Ваш вопрос невозможно ответить, надо смотреть Ваш код и сайт. Все запросы есть в консоле, смотрите какие это запросы, какой код их запускает и ищите возможность их сократить.
Потому как невозможно без гадалки понять, что там за запросы, нужны ли они. есть ли дубли или просто не оптимально все сделано.
ПС: задавая вопрос уходите он Вашего случая и переходите к абстракциям при объяснении. Иногда лучше разбить вопрос на несколько вопросов. И Когда вводите понятия, типа
много делаешь редактирование

подкрепляйте объяснениями и кодом. Вы привели js. но где там "делаешь редактирование" только Вам известно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы