【发布时间】:2012-06-15 19:03:28
【问题描述】:
更新:通过禁用干扰 Ajax 成功响应的 CodeIgniter Profiler 来实现此功能。我认为它在 JSON 响应中添加了一个 div。
我正在尝试使用 mysql 数据库中的数据填充依赖选择框。问题是,尽管响应 Ajax 请求以正确的格式获取数据,但依赖选择框没有得到填充。
请帮助我,因为我完全不知道这里发生了什么。下面是我的 JavaScript 代码。
<script type="text/javascript">
$(document).ready(function(){
$('#country').change(function(){
$("#cities > option").remove();
var form_data = {
country: $('#country').val(),
csrf_token_name: $.cookie("csrf_cookie_name")
};
$.ajax({
type: "POST",
url: "http://localhost/outlets/get_cities",
data: form_data,
dataType : "JSON",
success: function(cities)
{
$.each(cities,function(id,name)
{
var opt = $('<option />');
opt.val(id);
opt.text(name);
$('#cities').append(opt);
});
}
});
});
});
</script>
这里是 HTML。我正在使用 Codeigniter。
<form id="form">
<?php $cities['#'] = 'Please Select'; ?>
<label for="country">Country: </label><?php echo form_dropdown('country_id', $countries, '#', 'id="country"'); ?><br />
<label for="city">City: </label><?php echo form_dropdown('city_id', $cities, '#', 'id="cities"'); ?><br />
</form>
这里是控制器:
function get_cities(){
$country = $this->input->post('country');
$this->load->model('city');
header('Content-Type: application/x-json; charset=utf-8');
echo (json_encode($this->city->get_cities($country)));
}
&模特:
function get_cities($country = NULL){
$this->db->select('id, name');
if($country != NULL){
$this->db->where('countries_id', $country);
}
$query = $this->db->get('cities');
$cities = array();
if($query->result()){
foreach ($query->result() as $city) {
$cities[$city->id] = $city->name;
}
return $cities;
}else{
return FALSE;
}
}
【问题讨论】:
-
您如何验证响应是否正确?你的数据是什么样的?如果您不向我们展示正在循环的内容,则无法判断您的循环是否正确。
-
@am 不是我:有效点。我将在问题中添加控制器和模型代码。
-
请改为添加呈现的响应。这样更容易阅读。您可以将其记录到控制台,然后复制/粘贴它。
console.log(JSON.stringify(cities)); -
这是我收到的回复:{"1":"Delhi-NCR","2":"Bangalore","4":"Mumbai"}。
-
如果您在
success回调中执行console.log(typeof cities);会得到什么?
标签: javascript ajax jquery