Jquery .load() проблема c передачей параметров

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.19, 11:36

В модели:

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

	public static function getTest($a){
		return '<option>Это ответ функции getTest c параметром '.$a.'</option>';
	}
В контроллере:

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

	public function actionGettest($a)
	{
		return Zapisi::getTest($a);
	}
В _form:

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

...
<?= $form->field($model, 'day')->widget(DatePicker::class, [
	'language' => 'ru',
    'dateFormat' => 'dd.MM.yyyy',
	'clientOptions' => [
		'minDate' => 0,
		'maxDate' => '+30d',
		'onClose' => new yii\web\JsExpression ('showtime')
    ], 
]) ?>
<div class="time-select">
	<?= $form->field($model, 'vremya')->dropDownList( 
        ArrayHelper::map(app\models\Zapisi::find()->all(), 'id', 'vremya'),
            ['prompt'=>'Выберите время...',
            ]);
	?>
</div>
...
<?php
$url=Url::to(['zapisi/gettest']);
$script = "
function showtime(){
	$('.time-select').fadeOut('slow');
	$('#zapisi-vremya').load('".$url."', {a:123}, function(){
		$('.time-select').fadeIn('slow');
	});
};";
$this->registerJs($script, yii\web\View::POS_READY);
?>
Данные на сервер передаются, но ответ Bad Request (#400): Missing required parameters: a.
Если написать:

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

$url=Url::to(['zapisi/gettest?a=']);
То респонсе приходит без переданного значения:

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

<option>Это ответ функции getTest c параметром </option>
Это баг Yii2 или как-то по-другому надо?
А если нужно несколько параметров передавать, то url как писать?

masson
Сообщения: 489
Зарегистрирован: 2012.07.03, 15:59

Re: Jquery .load() проблема c передачей параметров

Сообщение masson » 2019.06.19, 11:51

Говорил же - надо посмотреть какой запрос уходит. Метод load отправляет POST-параметры, а не GET

Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Re: Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.20, 04:15

При $url=Url::to(['zapisi/gettest?a=']);
Изображение
Ответ:

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

<option>Это ответ функции getTest c параметром </option>
При $url=Url::to(['zapisi/gettest']);
Изображение

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

Ответ: Bad Request (#400): Missing required parameters: a

Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Re: Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.20, 09:36

Дебаг-панели Yii2:

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

General Info
Name	Value
method	'POST'
isAjax	true
isPjax	false
isFlash	false
isSecureConnection	false
Routing
Name	Value
Route	'zapisi/gettest'
Action	'app\\controllers\\ZapisiController::actionGettest()'
Parameters	[]
$_GET
Empty.

$_POST
Name	Value
a	'135'
$_FILES
Empty.

$_COOKIE
Name	Value
PHPSESSID	'3q4kh0oom9qt0b99i39aveun5p'
_csrf	'056c2ca938726c9feaf25dbdcf5e3c88ab15bb850bae4aa3e841c4176032596ea:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"dUlI_EoIrGOO4VerB87hII8_sjZLQ_jx\";}'
Request Body
Name	Value
Content Type	'application/x-www-form-urlencoded; charset=UTF-8'
Raw	'a=135'
Decoded to Params	[
    'a' => '135'
]

Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Re: Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.20, 09:38

config/web.php

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

        'urlManager' => [
            'enablePrettyUrl' => true,
			'enableStrictParsing' => false,
            'showScriptName' => false,
            'rules' => [
				[	'class' => 'yii\rest\UrlRule', 
					'pluralize' => false,				
					'controller' => 'prest',
					'except' => ['delete', 'create', 'update'],
					'extraPatterns' => ['GET search' => 'search']
				],
            ],
        ],

Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Re: Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.20, 10:07

Если написать:

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

$url=Url::to(['zapisi/gettest','a'=>351]);
...
            url: '".$url."',
            type: 'POST',
            data: {a:153},
То отлично работает, выходит:

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

<option>Это ответ функции getTest c параметром 351</option>
Как правильно написать url, чтоб передавались параметры из JS?

Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Re: Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.20, 10:27

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

type: 'GET',
так работает

masson
Сообщения: 489
Зарегистрирован: 2012.07.03, 15:59

Re: Jquery .load() проблема c передачей параметров

Сообщение masson » 2019.06.20, 14:50

Контроллер для метода load()

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

public function actionGettest()
	{
                $a = Yii::$app->request->post('a');
		return Zapisi::getTest($a);
	}

Spot
Сообщения: 61
Зарегистрирован: 2013.04.09, 04:04

Re: Jquery .load() проблема c передачей параметров

Сообщение Spot » 2019.06.25, 04:53

Спасибо большое, MASSON!!!

Аватара пользователя
leonenco
Сообщения: 106
Зарегистрирован: 2017.01.30, 22:42

Re: Jquery .load() проблема c передачей параметров

Сообщение leonenco » 2019.06.25, 08:28

BAD request был вам наводкой. У вас в методе должен присутствовать параметер. @masson показал второй метод и он тоже прав. чтоб небыло такого в будущем, рефакторите свой основной метод:

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

        public function actionGettest($a = null)
	{
                if(is_null($a))
                {
                       $a = Yii::$app->request->post('a');
		       return Zapisi::getTest($a);
                }
		return Zapisi::getTest($a);
	}

Ответить