Я использую ajax во yii2. Я реализовал что когда в gridciew нажимаешь, выходит блок, там можно просмотреть как сам заказ, так и можно нажать на редактирование и переходит внутри блока на редактирование.
Только когда много делаешь редактирование и опять нажать на другую строку чтобы она раскрылась, то выходит слишком много запросов и позже тормозит и некорректно работает. Выходит еще предупреждение
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