【发布时间】:2011-01-20 16:58:43
【问题描述】:
我有一个 CodeIgniter MVC 应用程序。
我有一个名为 city 的模型,它有一个方法:
<?php
class Cities_model extends Model{
function Cities_model(){
parent::Model();
}
function get_cities($id = null){
$this->db->select('id, city_name');
if($id != NULL){
$this->db->where('country_id', $id);
}
$query = $this->db->get('cities');
$cities = array();
if($query->result()){
foreach ($query->result() as $city) {
$cities[$city->id] = $city->city_name;
}
return $cities;
}else{
return FALSE;
}
}
...
控制器:
function Post(){
$this->load->helper('form');
$this->load->model('cities_model');
$this->load->model('country_model');
$this->load->model('field_model');
$data['cities'] = $this->cities_model->get_cities();//optional $id parameter
$data['countries'] = $this->country_model->get_countries();
$data['fields'] = $this->field_model->get_fields(); //subject field
$this->load->view('post_view',$data);
}
此方法用于填充下拉列表的内容。我有一个类似的国家模型,它也有一个下拉菜单。
您可以看到 get_cities 方法设置为接受 country_id。如果选择了一个国家,这将用于过滤结果。
我的问题是我需要帮助使用 Ajax(最好是 jQuery)调用此方法。我是 ajax 新手,以前从未做过类似的事情。
非常感谢任何帮助!
比利
更新
我添加了 jquery 库并在我的控制器中创建了方法:
function get_cities($country){
header('Content-Type: application/x-json; charset=utf-8');
echo(json_encode(array($this->cities_model->get_cities($country))));
}
这是我的 javascript 视图:
<script type="text/javascript">
$(document).ready(function(){
$('#country').change(function(){
var country_id = $('#country').val(); // here we are taking country id of the selected one.
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>home/get_cities/"+country_id,
data: ({country : country_id}),
success: function(cities){
$.each(cities,function(i,city)
{
var opt = $('<option />');
opt.val(city.value);
opt.text(city.text);
$('#cities').append(opt);
});
}
});
});
});
这是json回复:
[{"2":"Accra"}]
所以它成功地检索了正确的数据。唯一的问题是它在下拉列表中添加了空白值/文本。每次更改城市时都会添加数据,所以我想我必须先清除下拉列表?
【问题讨论】:
标签: php ajax codeigniter jquery