我是一个表单,其中状态在db中的选择框中填充,并且基于状态选择city必须在下面的选择框中填充。任何人都可以帮我解决这个问题,我怎样才能使用codeigniter.I尝试了ajax方式,但是它没有工作'undefined'。
function get_city(){
var state=$("#state").val();
var dataString = 's_id='+ state;
var url="<?php echo base_url()?>admin/home/get_city";
$.ajax({
type:"POST",
url:url,
data:dataString,
success:function(data){
$("#city").html(data);
}
});
}
控制器:
function get_city(){
$this->load->model('data_model');
$data['records']=$this->data_model->get_cities();
return $data['records'];
}
型号:
function get_cities(){
$this->db->select('id','city');
$this->db->from('cities');
$this->db->where('s_id', $this->uri->segment(4));
$query=$this->db->get();
if($query->num_rows()>0){
foreach($query->result() as $row){
$data[]=$row;
}
return $data;
}
}
我需要帮助
答案 0 :(得分:0)
控制器
function get_city(){
$this->load->model('data_model');
$records = $this->data_model->get_cities();
$city_html = '';
foreach ($records as $row) {
$city_html .= '<option value="'. $row['id'] .'">'. $row['city'] .'</option>';
}
echo $city_html;
exit;
}
答案 1 :(得分:0)
对于这类事情,你实际上更好地使用JSON:
动作:
function get_cities() {
// Load your model.
$this->load->model('data_model');
// Get the data.
$cities = $this->data_model->get_cities();
// Specify that we're returning JSON.
header('content-type: application/json');
// Return a JSON string with the cities in.
return json_encode(array('Cities' => $cities));
}
使用Javascript:
$('#state').change(function()) {
// Get an instance of the select, and it's value.
var state = $(this),
stateID = state.val();
// Add if statement to check if the new state id
// is different to the last to prevent loading the same
// data again.
// Do the Ajax request.
$.ajax({
url : '/path/to/get_cities', // Where to.
dataType : 'json', // Return type.
success : function(data) { // Success :)
// Ensure we have data first.
if(data && data.Cities) {
// Remove all existing options first.
state.find('option').remove();
// Loop through each city in the returned array.
for(var i = 0; i <= data.Cities.length; i++) {
// Add the city option.
state.append($('option').attr({
value : data.Cities[i].value
}).text(data.Cities[i].city));
}
}
},
error : function() {
// Do something when an error happens?
}
});
});
上面的代码将简单地返回城市列表,作为JSON对象,即
{Cities:[{id:1,city:'London'},{id:2,city:'Paris'}]}
当jQuery获取它时,它会将其转换回一个数组,然后您可以通过data.Cities[0].city
访问该数组,其中数据是jQuery成功回调返回的对象。
你“可以”将城市预处理成HTML并返回,但是不能在其他地方重复使用,所以你最好通过返回JSON使它变得可移植。
希望这会有所帮助:)