Страница 1 из 1

Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.19, 23:53
Сергей2003
Мне надо через Ajax передать из ActiveForm данные в контроллер. Написал простейший тестовый вариант - выводить или сообщение "IsAjax", или "Form", но никакого сообщения не выводится. Может я чего-то не учел или неправильно сделал. Помогите, пожалуйста, если кто может.
Фрагмент view:

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

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;

$this->title = 'Test';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-test">

    	<h1><?= Html::encode($this->title) ?></h1>
	<h5><?= Html::encode('items ='.$items) ?></h5>

   	 <?php $form = ActiveForm::begin([
       		 'id' => 'test-form',
        	 'layout' => 'horizontal',
   	 ]); ?>

        <?= $form->field($model, 'test')->input('Категории') ?>
        
	<div class="form-group">
                <?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary',]) ?> 
        </div>        

    <?php ActiveForm::end(); ?>  

</div>
Фрагмент jscrip.js:

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

$('#test-form').on('beforeSubmit',function() {
    var data = $(this).serialize();

	$.ajax ({
		type: "POST",
		url: "/site/test",
		data: data,
		success: function(res) {
			console.log(res);
		},
		error: function() {
			alert('error');
		}
	});
	return false;
});
Фрагмент контроллера:

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

	public function actionTest()
    {
        $model = new TestForm();

	if (Yii::$app->request->isAjax) {
            $items = "isAjax";
        }
        if ($model->load(Yii::$app->request->post()) && $model->test()) { 
            $items = "Form";
	}
	
        return $this->render('test', [
            'model' => $model,
            'items' => $items,
        ]);
    }

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 09:24
SiZE

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 11:36
Сергей2003
Спасибо за попытку мне помочь. Я попадаю в контроллере в проверку загрузки формы, но в проверку Ajax так и не попадаю. Я закомментировал проверку загрузки формы, чтобы точно убедиться попадаю ли я в проверку Ajax. В результате - не попадаю. Я еще подкорректировал jscript.js. Подскажите, пожалуйста, что еще можно сделать. В чем мои ошибки ?
Фрагмент jscipt.js:

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

$('#test-form').on('beforeSubmit',function() {
    var data = $(this).serializeArray();

	$.ajax ({
		type: 'post',
		url: '/site/test',
		data: data,
        dataType: 'json'
	});
    .done(function(response) {
        if (response.data.success == true) {
            alert("Wow you commented");
        }
    })
    .fail(function() {
        console.log("error");
    });
});
Фрагмент контроллера:

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

    public function actionTest()
    {
        $model = new TestForm();

	if (Yii::$app->request->isAjax) {
            $items = "isAjax";
        }
/*		
        if ($model->load(Yii::$app->request->post()) && $model->test()) { 
            $data = Yii::$app->request->post('TestForm', []);
            $items = $data['test'];
	}
*/		
        return $this->render('test', [
            'model' => $model,
            'items' => $items,
        ]);
    }

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 13:10
urichalex
Дебажьте в инспекторе. Уходит ли запрос, возвращается ли ответ, что именно возвращается

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 13:10
urichalex
И, судя по коду контроллера, где вы вообще отдаете то, что ожидаете в JS?

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 13:43
Сергей2003
Почему Ajax выдает ошибку 'error':

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

    .fail(function() {
        console.log("error");
    })
Фрагмент jscript.js:

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

$('#test-form').on('beforeSubmit',function() {
    var data = $(this).serializeArray();

	$.ajax ({
		type: 'post',
		url: '/site/test',
		data: {'data':data},
        dataType: 'json'
	})
    .done(function(response) {
        if (response.data.success == true) {
            alert("Wow you commented");
        }
    })
    .fail(function() {
        console.log("error");
    })
});

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 13:55
urichalex
.fail(function(error) {
console.log(error);
})

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 16:20
Сергей2003
Не помогло. В контроллере в проверку Ajax не попадаю. Если раскрыть проверку загрузки формы, то данные получаются.

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 16:54
urichalex
Сергей2003 писал(а): 2019.01.20, 16:20 Не помогло. В контроллере в проверку Ajax не попадаю. Если раскрыть проверку загрузки формы, то данные получаются.
Я и не говорил, что поможет. Смотрите, что в error приходит

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 17:49
Сергей2003
Я попадаю в jscript.js в:

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

    .fail(function() {
        console.log("error");
    })
и выводится 'error'.
B консоле указывается ошибка на строку:

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

 console.log("error");

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 19:22
Сергей2003
Постараюсь сам разобраться.

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 20:43
urichalex
Разницу видите?

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

.fail(function(error) {
	console.log(error);
})
и

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

.fail(function() {
        console.log("error");
})

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.20, 22:02
Сергей2003
Спасибо. Я уже заметил и исправил. Вот что выдается:

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

{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
Как полностью просмотреть ?

Re: Данные из ActiveForm не передаются в контроллер через Ajax

Добавлено: 2019.01.21, 12:27
Сергей2003
Сам разобрался.