@Evgenya-k2

Почему не передаются данные ajax в Yii2?

По нажатию кнопки пытаюсь ajax запросом удалить картинку из таблицы ProductImg.
Отправляю айдишник картинки, но он не приходит в контроллер, в debug консоли соответственно выводится "Call to a member function delete() on null". В чем может быть ошибка?
Код представления:
<?php 
    echo '<div class="row row-eq-height">';
    foreach($model->productImgs as $img){
    echo '<div class="col-md-4" id="product-img-' . $img->id . '"><div class="product-img__container">'
    .Html::img('/images/products/' . $img->alias, ['alt' => '', 'class' => 'img-responsive'])
    .'<button onClick="DeleteImg('.$img->id.')" class="btn btn-danger">Удалить</button>'
    .'</div></div>';
    }
    echo '</div>';
?>

JS:
function DeleteImg(id)
{
    if (!confirm('Удалить изображение?')) {
        return false;
    }
    $.ajax(
        {
            dataType: 'html',
            url: '/productimg/delimage',
            type: "POST",
            data: {
                id: id
            },
            success: function (data)
            {
                $("#product-img-" + id).hide();
            },
            error : function(jqXHR) {
                console.log(jqXHR.responseText);
            }
        });
}

Код контроллера (сами изображения удаляются в модели в методе beforeDelete() ):
public function actionDelimage(){
        $id = Yii::$app->request->post('id');
        $model = ProductImg::findOne($id);
        $model->delete();

        return true;
    }
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Проверьте, что id подставляется в html
'<button onClick="DeleteImg('.$img->id.')"
Это лишнее dataType: 'html',
Проверьте, что в post есть нужное значение
public function actionDelimage(){
       // например так
        print_r(Yii::$app->reqiest->post);
        $id = Yii::$app->request->post('id');
        $model = ProductImg::findOne($id);
        $model->delete();
        return true;
    }

Возможно в findOne не возвращается нужная модель
public function actionDelimage(){
    if(Yii::$app->request->isAjax){
        $id = Yii::$app->request->post('id');
        if(($model = ProductImg::findOne($id)) !== null){
            $model->delete();
            return true;
        }
        else{
             throw new NotFoundHttpException('The requested page does not exist.');
         }

    } 
 }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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