[英]Yii2 Ajax Request not working
我一直在嘗試使用一個小部件,它允許我做依賴下拉列表而不必自己編寫任何javascript,但有些東西不起作用,我很確定它與url有關。
我的控制器動作
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;
}
我的觀點的父母下拉列表
<?=
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
],
])
?>
我的觀點的第二次下拉
<?=
$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和可以在github上找到的yii2實用樣板做到這一點,但結果是一樣的。 使用這樣的url只會拋出錯誤404.當我將前綴'?r ='附加到url參數時,它實際上似乎找到了控制器操作,但它確實沒有,因為我嘗試使用另一個控制器的名稱它不存在,也沒有拋出任何錯誤。
順便說一句,我正在使用我需要在我需要使用它們的文件頂部使用的擴展或模型的命名空間。
更新(2014年11月3日)
駝峰案例動作名稱的問題在yii2中被解決為向后兼容性問題 。 當您定義名為actionSayHelloWorld
的控制器操作時,您只能在具有超級id的URL中調用它: <conroller name>/say-hello-world
。
====================================
我經歷了一些問題,這個名字給我自己調用控制器動作。 當我的控制器Person
有動作actionGreetHelloWord
,我無法從url調用它,它總是會產生404.但是,當我將動作名稱更改為actionGreethelloworld
,我可以將其稱為url with person/greethelloworld
(全部小寫,包括g問候)。
因此,當您將操作名稱更改為Getmunicipioslist
並使用/ as創建URL時,我認為您的問題將得到解決:
'url'=>Url::to('region-estados/getmunicipioslist'),
或'url'=>\\yii::$app->getUrlManager()->createUrl('region-estados/getmunicipioslist'),
為了避免太多工作,您可以先在控制器中更改操作名稱,然后在地址欄中鍵入控制器和操作的URL( .../region-estados/getmunicipioslist'
),如果可以,請執行更改你的看法。
我不知道yii默認情況下是否可以在其名稱中找到帶有-
控制器。
好吧我發現Yii2會像這樣驗證它:
actionGetMunicipiosList => get-municipios-list
希望能幫助到你 ;)
好的,所以你真的在這里做點什么。 我正要放棄Yii2 ......我仍然懷疑它,但我想如果我需要的話,我會用它。
我將控制器操作的名稱更改為Getmunicipioslist
並將其稱為Url::to(['region-estados/getmunicipioslist'])
我不認為不讓人們使用函數名稱是有意義的,我們這樣做是有原因的,它使我們的代碼更容易被其他人和我們自己閱讀,但無論如何。
謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.