场景:点击一个分类,更换一个URL
<?php $form = ActiveForm::begin([
'id' => strtolower($model->formName()),
'action' => ['/apitools/default/index']
]); ?>
<?= $form->field($model, 'type')->dropDownList(
ApiTool::getType(),
['prompt' => '选择一个分类']
) ?>
<?= $form->field($model, 'url')->dropDownList(
[],
['prompt' => '选择一个url']
) ?>
<?php ActiveForm::end(); ?>
关于 JsBlock,参考这篇文章:Yii2 如何更好的在页面注入JavaScript
<?php JsBlock::begin() ?>
<script>
jQuery("#apitool-type").change(function () {
var html = '';
$.ajax({
url: '<?= \yii\helpers\Url::to(["/apitools/default/type-list"]) ?>',
type: 'GET',
dataType: 'json',
data: {type: $(this).val()},
success: function (msg) {
$.each(msg, function (key, val) {
html += '<option value="' + key + '">' + val + '</option>';
});
$("#apitool-url").html(html);
}
})
});
});
</script>
<?php JsBlock::end() ?>
返回JSON的 key-value
public function actionTypeList()
{
$type = \Yii::$app->request->get('type');
return Json::encode(ApiTool::getUrl($type));
}
$.each(msg, function (key, val) {
html += '<option value="' + val['id'] + '">' + val['pointname'] + '</option>';
});
我的JSON是多条记录的,因此用key和val是不对的~所以~~用val[字段名]即可获取。