Задать вопрос
@Leffken
Студент, как студент!

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

Всем привет.
Пытаюсь реализовать динамику в yii2.
Выделил нужный блок формы в pjax.
Создал кнопку и событие для нее.
А вот ajax запрос что то не получается.

<?php
$js = "$('#btn_add').on('click', function () {
        $.ajax({
            url: ,  
            type: 'POST',
            data: $action='two',
            success: function(response) {
                $.pjax.reload({container: '#pjax-form1'});
            }
        });
        return false;
    })";
$this->registerJs($js);

Какой url нужно прописать, чтобы отправить данные в контроллер ? Создал в нем action для обработки динамики, сам файл представления не создавал. И как потом вернуть результат ?
_
Внес такие изменения:
скрипт
<?php
$js = "$('#btn_add').on('click', function () {
        $.ajax({
            url: '/trip/add',
            type: 'POST',
            dataType: 'json',
            data: { 'action' : 'two' },
            success: function(response) {
                $.pjax.reload({container: '#pjax-form1'});
            },
            error: function(){
                alert('error')
            }
        });
        return false;
    })";
$this->registerJs($js);


контроллер
public function actionAdd()
    {
        $count = $_POST['action'];

        if ($count == 'two') $c = 2; else $c = 1;
        $modelCouples = [new Couple()];        
        for ($i = 1; $i < $c; $i++) {
            $modelCouples[] = new Couple();
        }

        $res = Yii::$app->getResponse();
        $res->format = Response::FORMAT_JSON;
        $res->data = $modelCouples;
        $res->send();
    }

Выдает ошибку Internal Server Error, ajax запрос не выполняется, вылазит "error"
  • Вопрос задан
  • 2627 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@VZVZ
Reverse-Engineer, Software Developer, Architect
Что такое registerJs, не знаю.
А вообще URL должен получиться примерно такого плана:
localhost/index.php?r=site/add
Или такого:
localhost/site/add
Где контроллер называется SiteController. Короче говоря, всё точно так же, как и если без аякса

Насчет возврата значения, я бы возвращал строку JSON, проверил бы в браузере (адресной строкой) а уже потом писал клиентский код
Ответ написан
Комментировать
@polar-bear
Если вьюха, в которой вы написали JS, находится в контексте контроллера на экшен которого отправляете запрос, то можно:
url: " . Url::to(['add']) . ",
или
url: " . Url::to(['controllerName/add']) . ",

В экшене, возможно стоит поставить:
Yii::$app->response->format = Response::FORMAT_JSON
и тогда Yii вернет ответ в формате json. A объекту конфигурации ajax: 'dataType': 'json'
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы