AJAX不显示结果

时间:2016-01-23 18:29:06

标签: php ajax codeigniter

我试图从另一个下拉列表的值中填充下拉列表,所以这是我的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。

我没有看到任何问题。感谢有关如何解决此问题的输入。感谢。

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