Вывод из Ajax во view

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
aleksandr.chirkov
Сообщения: 9
Зарегистрирован: 2019.02.24, 13:31

Вывод из Ajax во view

Сообщение aleksandr.chirkov »

Добрый день, Уважаемые форумчане! Пожалуйста подскажите.

Делаю Ajax запрос по нажатию на ссылку:

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

$(".link").on('click', function (e) {
    e.preventDefault();
    var name = $('#testName').val();
    var questions = $('#questionsCount').val();
    var varsNumber = $('#countOfVars').val();
    $.ajax({
        url: '/?r=app%2Fcreate-tests',
        data: {
            'name' : name
        },
        type: "GET",
        success: function(res){
            console.log(res);
        },
        error: function(){
            alert('ошибка');
        }
    });
});
В этом коде просто беру 3 статичных значения, передаю в контроллер.

В этом контроллере, могу проверить что они принимаются.

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

 public function actionCreateTests()
    {
        if(Yii::$app->request->isAjax){
            echo $name = Yii::$app->request->get('name');
        }

        return $this->render('createTests');
    }
А теперь, я хочу передать это значение во view как переменную $name, но без перезагрузки страницы, если я пробую делать так:

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

if(Yii::$app->request->isAjax){
            echo $name = Yii::$app->request->get('name');
            $this->return('createTests',compact('name'));
        }
Так не работает.
Подскажите, как мне вывести переменную из контроллера, взяв ее со страницы через Ajax...или киньте ссылку почитать пожалуйста.
Заранее спасибо!
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Вывод из Ajax во view

Сообщение darlov »

Не совсем понятно, что именно хочешь. попробую догадаться) Если так попробовать?

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

if(Yii::$app->request->isAjax){
  return $this->renderAjax('createTests',['name'=>Yii::$app->request->get('name')]);
}
aleksandr.chirkov
Сообщения: 9
Зарегистрирован: 2019.02.24, 13:31

Re: Вывод из Ajax во view

Сообщение aleksandr.chirkov »

Я хочу воспользовавшись 1-им action совершить вот какое действие:
Сначала этот actionCreateTests рендерит мне мой View. У меня есть форма, я с помощью Jquery беру оттуда значения, Ajax запросом передаю это в тот же actionCreateTests , а потом экшн понимает, что в него пришел Ajax запрос присваивает переменной $name значение и передает ёё в вид, но без перезагрузки страницы, а потом действует код типа:

if(isset($name)){ то выводим что-то }

Возможно, для этого нужно использовать widget pjax, но.. я думаю, что есть способ и без него эту процедуру проделать? Или я не прав?
Просто я вижу в логах, что и мой запрос отрабатывает и показывает что Ajax - ok и если я в console.log посмотрю, то увижу переданное значение, но в вид, оно как бы не попадает.
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Вывод из Ajax во view

Сообщение darlov »

aleksandr.chirkov писал(а): 2019.02.24, 19:47 Я хочу воспользовавшись 1-им action совершить вот какое действие:
Сначала этот actionCreateTests рендерит мне мой View. У меня есть форма, я с помощью Jquery беру оттуда значения, Ajax запросом передаю это в тот же actionCreateTests , а потом экшн понимает, что в него пришел Ajax запрос присваивает переменной $name значение и передает ёё в вид, но без перезагрузки страницы, а потом действует код типа:

if(isset($name)){ то выводим что-то }

Возможно, для этого нужно использовать widget pjax, но.. я думаю, что есть способ и без него эту процедуру проделать? Или я не прав?
Просто я вижу в логах, что и мой запрос отрабатывает и показывает что Ajax - ok и если я в console.log посмотрю, то увижу переданное значение, но в вид, оно как бы не попадает.

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

 public function actionCreateTests()
    {
        if(Yii::$app->request->isAjax){
            return $this->renderAjax('createTests',['name'=>Yii::$app->request->get('name')]);
        }
        return $this->render('createTests');
    }

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

$(".link").on('click', function (e) {
    e.preventDefault();
    var name = $('#testName').val();
    var questions = $('#questionsCount').val();
    var varsNumber = $('#countOfVars').val();
    $.ajax({
        url: '/?r=app%2Fcreate-tests',
        data: {
            'name' : name
        },
        type: "GET",
        success: function(res){
            $(your selector for the view).html(res)
        },
        error: function(){
            alert('ошибка');
        }
    });
});
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Вывод из Ajax во view

Сообщение proctoleha »

В контроллере вы должны отдавать данные в формате json

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

    public function actionTest()
    {
        \Yii::$app->response->format = Response::FORMAT_JSON;
        $result = [
            'html' => null,
            'error' => null
        ];
        try {
            // что-то делаем
            $data = [];
            $result['html'] = $this->renderAjax('my-view', ['data' => $data]);
        } catch (\Exception $e) {
            $result['error'] = $e->getMessage();
        }
        
        return $result;
    }
В вашем view, где вы принимаете ответ сервера, обращаемся к data.html, или data.error
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
aleksandr.chirkov
Сообщения: 9
Зарегистрирован: 2019.02.24, 13:31

Re: Вывод из Ajax во view

Сообщение aleksandr.chirkov »

darlov - спасибо Вам большое, у меня получилось по тому способу, что Вы показали. Единственное, что мне надо будет сделать отдельный view с логикой который будет подгружать ajax часть! Спасибо!

Уважаемый proctoleha - Спасибо Вам большое за участие в вопросе, я обязательно попробую реализацию и Вашим методом!
Закрыто