使命:
在称为部门的员工表单字段中实现部门的自动完成(保存在部门表中)。用户输入部门名称的几个拼写,这会显示与部门匹配的名称列表用户选择一个,就是这样。
平台
- 蛋糕PHP 2.1
- Jquery UI Autocomplete(Jquery UI 库版本 1.8.18 的一部分)
数据库模型
员工 (id, first_name,last_name,department_id) 部门 (id,name)
所以在我的 add.ctp 文件中,ajax 调用类似于
$( "#auto_complete" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "/employees/showDepartment",
dataType: "json",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function( data ) {
alert("success--");
response( $.map( data, function( item ) {
//alert(item);
return {
label: item.name,
value: item.id
}
}));
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.label :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
我的 EmployeeController 中有一个名为 show_depatment() 的操作
public function getAddress() {
$this->autoRender = false;// I do not want to make view against this action.
$this->log($this->params->query['name_startsWith'] , 'debug');
$str = $this->params->query['name_startsWith'];
$this->log($str, 'debug');
$this->layout = 'ajax';
$departments = $this->Employee->Department->find('all', array( 'recursive' => -1,
'conditions'=>array('Department.name LIKE'=>$str.'%'),
'fields'=>array('name', 'id')));
//$this->set('departments',$departments);
$this->log($departments, 'debug');
echo json_encode($departments);
}
我不希望 show_department 操作有任何视图,所以我做了$this->autoRender = false;
但它没有按预期工作。
当我在响应和 HTLM 部分使用萤火虫调试响应时,它显示
[{"Department":{"name":"Accounting","id":"4"}}] // when i type "acc" in input field
问题
- 如何使其显示在表单字段中。
- 回声 json_encode($departments); 以json格式发送响应的正确方法吗?
- 当我在 ajax 调用 (alert(item);) 的成功部分发出警报时,它给出的错误为“未定义”