我试图从另一个下拉列表的值中填充下拉列表,所以这是我的ajax代码。
$(document).ready(function() {
$('#category').change(function () {
var category = $('#category :selected').val(); // <-- change this line
console.log(category);
$.ajax({
type: "POST",
url: "<?php echo base_url('Ajax_test_controller/populateSubcategory'); ?>",
data: category,
dataType: 'json',
success: function(data) {
console.log(data);
$(data).each(function(){
$("#subcategory").append($('<option>', {
value: this.id,
text: this.subcategory,
}));
})
},
error: function(errorw) {
alert("hi");
}
});
});
});
这是我的控制器
public function populateSubcategory(){
$category_id = $this->input->post('category');
$data = $this->ajax_test_model->getSubCategory($category_id);
echo json_encode($data);
}
这是我的模特
function getSubCategory($category_id){
$this->db->select('id, subcategory');
$this->db->from('subcategory');
$this->db->where('category_id', $category_id);
$this->db->order_by("subcategory", "asc");
$query = $this->db->get();
return $query->result();
}
这是我的观点
<div>
<div class="form-group">
<label class="control-label">Category : </label>
<select name="category" id="category">
<option value="0">Select Category</option>
<?php
if(is_array($category) || is_object($category)){
foreach($category as $category_row){
echo '<option value="'. $category_row->id .'">'. $category_row->category .'</option>';
}
}
?>
</select>
<label class="control-label">Subcategory : </label>
<select name="subcategory" id="subcategory">
</select>
</div>
</div>
我不知道我的语法是否有错,但每当我尝试将模型更改为
时function getSubCategory($category_id){
$cat = 1;
$this->db->select('id, subcategory');
$this->db->from('subcategory');
$this->db->where('category_id', $cat);
$this->db->order_by("subcategory", "asc");
$query = $this->db->get();
return $query->result();
}
我得到了这个模型我想要的结果。但这只是为了检查我是否从查询中获得了任何内容。
我的猜测是category_id没有传递给我的模型。但是当我检查category_id的值时,它等于1。
我没有看到任何问题。感谢有关如何解决此问题的输入。感谢。
答案 0 :(得分:1)
从JQuery文档中,使用POST
数据选项可以包含 key1 = value1&amp; key2 = value2 形式的查询字符串,也可以包含 {key1:&#39; value1&#39; ,key2:&#39; value2&#39;} 。如果使用后一种形式,则在发送之前使用jQuery.param()将数据转换为查询字符串。通过将processData设置为false可以避免此处理。如果您希望将XML对象发送到服务器,则可能不希望进行处理;在这种情况下,将contentType选项从application / x-www-form-urlencoded更改为更合适的MIME类型。
在你的Ajax请求中试试这个:
var category = $('#category :selected').val();
...
...
type: "POST",
url: "<?php echo base_url('Ajax_test_controller/populateSubcategory'); ?>",
data: {
category:category
},
//dataType: 'json' No real reason to use JSON here