Hi我有三个下拉列表,第一个是在我的控制器中填写的,第二个需要在ajax中用第一个的params填充,第三个需要第二个。当我的表单有效时,它会在两个下拉列表中打印以下错误在干草堆中找不到输入
这是我的ajax调用
$("#department_id").change(function(){
$.ajax({
type: "POST",
url: "<?php echo $this->url('zfcadmin/getprovinces'); ?>",
data: "dept="+$(this).val(),
success: function(msg){
$("#province_id").html(msg);
}
});
});
这是我的管理员,我做错了什么?有什么帮助吗?
public function getProvincesByIDAction()
{
$request = $this->getRequest();
$response = $this->getResponse();
if ($request->isPost()) {
$response->setStatusCode(200);
$codDpto=$request->getPost('dept');
$data=$this->getTable()->getProvinces($codDpto);
$buffer="<option value=''>Seleccione una Provincia</option>";
foreach ($data as $prov) {
$buffer.=<<<EOT
<option value='{$prov->codProv}'>{$prov->name}</option>
EOT;
}
$response->setContent($buffer);
$headers = $response->getHeaders();
}
return $response;
}
有什么帮助吗?
感谢
您可以在表单元素的选项中将"disable_inarray_validator"的值设置为"true
'options' => array(
'label' => 'Some Label',
'value_options' => array(),
'disable_inarray_validator' => true,
),
当您提交表单时,它将在服务器端重新创建。这意味着每个select元素的value_options
数组将不包含已发布的值(因为选项是通过AJAX加载的)
因此,错误"在干草堆中找不到输入"可以被认为是"您选择的选项不是选择元素中的选项"
为了验证已发布的值,您需要确保在发布表单时在服务器端的验证和表单填充之前(即$form->setData($request->getPost())
之前)添加这些选项。