Yii2 Ajax Запрос не работает

Я пытался использовать виджет, который позволяет мне делать зависимые выпадающие списки без необходимости писать какой-либо javascript самостоятельно, но что-то не работает, и я уверен, что это как-то связано с URL.

My Controller Action

public function actionGetMunicipiosList() {
$out = [];
if (isset($_POST['depdrop_parents'])) {
$parents = $_POST['depdrop_parents'];
if ($parents != null) {
$cat_id = $parents[0];
$out = RegionMunicipios::getMunicipioList($cat_id);
echo Json::encode(['output'=>$out, 'selected'=>'']);
return;
}
}
echo Json::encode(['output'=>'', 'selected'=>'']);
}

Функция, которую я вызываю из другой модели

public function getMunicipioList($cat_id){
$muni = RegionMunicipios::find()->where(['estados_id' => $cat_id])->asArray()->all();
$data = \yii\helpers\ArrayHelper::map($muni, 'id', 'descripcion');
/*foreach ($muni as $i => $m) {
$data[] = ['id' => $m['id'], 'name' => $m['descripcion']];
}*/
return $data;
}

Выпадающий родительский вид My View

<?=
Select2::widget([
'model' => $model,
'attribute' => 'estados_id',
'data' => ArrayHelper::map(RegionEstados::find()->all(),'id','descripcion'),
'options' => [
'placeholder' => 'Seleccione',
'id'=>'regionparroquias-estados_id'
],
'pluginOptions' => [
'allowClear' => true
],
])
?>

Второе выпадающее меню My View

<?=
$form->field($model, 'municipios_id')->widget(DepDrop::classname(), [
'type'=>DepDrop::TYPE_SELECT2,
#'data'=>ArrayHelper::map(RegionMunicipios::find()->where(['estados_id' => $model->estados->id])->all(),'id','descripcion'),
'options'=>[
'id'=>'regionparroquias-municipios_id',
'placeholder'=>'Seleccione'
],
'pluginOptions'=>[
'depends'=>[Html::getInputId($model, 'estados_id')],
'url'=>Url::to(['?r=region-estados/GetMunicipiosList']),
'loadingText'=>'Cargando...',
'initialize'=>($model->isNewRecord) ? false : true,
]
]
);
?>

Я пытался сделать это с помощью yii2 basic и практического шаблона yii2, который можно найти на github, но результат тот же.
С таким URL просто выдает ошибку 404.
Когда я добавляю префикс «? R =» к параметру url, на самом деле кажется, что он находит действие контроллера, но на самом деле это не так, потому что я попытался использовать имя другого контроллера, который не существует, и не было выдано никакой ошибки.

И, кстати, я использую пространства имен расширений или моделей, которые мне нужно использовать в верхней части файлов, где мне нужно их использовать.

1

Решение

Обновление (03.11.2014)

Проблема с именами действий в случае верблюда рассматривается как обратная совместимость проблема в течение yii2.
Когда вы определяете действие контроллера с именем actionSayHelloWorld Вы можете вызывать его только в URL с идентификатором: <conroller name>/say-hello-world,

====================================

Я испытываю некоторые проблемы с именем, вызывающим действия контроллера самостоятельно.
Когда мой контроллер Person имеет действие actionGreetHelloWordЯ не могу вызвать его из URL, это всегда приведет к 404. Однако, когда я изменяю имя действия на actionGreethelloworldЯ могу назвать это с помощью URL person/greethelloworld (все строчные, включая g приветствия).

Поэтому я думаю, что ваша проблема будет решена, когда вы измените имя действия на Getmunicipioslist и создайте URL с / as:

'url'=>Url::to('region-estados/getmunicipioslist'),
или же
'url'=>\yii::$app->getUrlManager()->createUrl('region-estados/getmunicipioslist'),

Чтобы избежать большой работы, вы можете сначала изменить имя действия в вашем контроллере и ввести URL (.../region-estados/getmunicipioslist') для контроллера и действия в адресной строке и, если это работает, внесите изменения в ваше представление.

Я не знаю, может ли yii по умолчанию найти контроллеры с - в его названии.

2

Другие решения

хорошо я понял, что Yii2 проверит это так:

actionGetMunicipiosList => get-municipios-list

Надеюсь, поможет 😉

1

Итак, вы действительно были на что-то здесь. Я собирался отказаться от Yii2 … У меня все еще есть сомнения по этому поводу, но я думаю, что буду использовать его, если мне когда-нибудь понадобится.

Я изменил название действия контроллера на
Getmunicipioslist

и называть это как Url::to(['region-estados/getmunicipioslist'])

Тем не менее, я не думаю, что имеет смысл не позволять людям придумывать имена функций, мы делаем это по какой-то причине, это делает наш код более читабельным для других и для нас самих, но не для этого.

Благодарю.

0
По вопросам рекламы [email protected]