使用AJAX,Jquery和Codeigniter的动态下拉菜单帮助:Firebug没有显示错误

时间:2012-11-06 06:03:28

标签: jquery ajax codeigniter

我无法让ajax与我的“动态组合框”一起工作。首先是代码: 观点:

<?php echo form_open('control_form/add_all'); ?>
    <label for="make">State<span class="red">*</span></label>
    <select id="make" name="make" >
        <option value=""></option>
        <?php
        foreach($makeOptions->result() as $make){
            echo '<option value="' . $make->make_id . '">' . $make->make . '</option>';
        }
        ?>
    </select>
    <label for="model">City<span class="red">*</span></label>
    <!--this will be filled based on the tree selection above-->
    <select id="model" name="model"> 
        <option value=""></option>
    </select>
    <label for="f_membername">Member Name<span class="red">*</span></label>
    <!--<input type="text" name="f_membername"/>-->
    <?php echo form_close(); ?>

视图控制器:

    function dropDown(){
         if ($this->ion_auth->requireAdmin())         
        $data = array('title' => 'DropDown', 'main_content' =>     'admin/dropDown');        
        $data['makeOptions'] = $this->vehicle_model->getMake(Null, Null);
        $data['modelOptions'] = $this->vehicle_model->getModel(Null, Null, NULL, Null);            
        $this->load->view('admin/includes/template', $data);          
}

Ajax控制器:

   function get_model($make){    
    header('Content-Type: application/x-json; charset=utf-8');
    echo(json_encode($this->vehicle_model->getModelByMake ($make)));
} 

Jquery:

$('#model').hide();
 $('#make').change(function(){
var make_id = $('#make').val();
if (make_id != ""){
    var post_url = "http://pulsedrivers.com/admin/get_model/" + make_id;
    $.ajax({
        type: "POST",
         url: post_url,
         success: function(models) //we're calling the response json array 'cities'
          {
            $('#model').empty();
            $('#model').show();
               $.each(models,function(model_id,model) 
               {
                var opt = $('<option />'); // here we're creating a new select option for each group
                  opt.val(model_id);
                  opt.text(model);
                  $('#model').append(opt); 
            });
           } //end success
     }); //end AJAX
} else {
    $('#model').empty();
    $('#model').hide();
}//end if
}); //end change 

模型(由get_model控制器使用):

function getModelByMake ($make, $tree = null){
    $this->db->select('model_id, model, make_id');

    if($tree != NULL){
        $this->db->where('make_id', $make);
    }
        $this->db->where('make_id', $make);
    $query = $this->db->get('model');
    $models = array();

    if($query->result()){
        foreach ($query->result() as $model) {
            $models[$model->model_id] = $model->model;
        }
        return $models;
    } else {
        return FALSE;
    }
}

视图包含两个下拉列表,一个显示,另一个显示相应的模型。选择make后,模型不会显示。 Firebug在此过程中没有显示任何错误。

已经检查过的东西:jquery工作,脚本加载。

控制器get_models返回一个像这样的数组1:Corvette,2:Camaro,这样看起来它也能正常工作。

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

您的问题的简单答案是您在模型中复制方法意味着您在模型中定义方法两次,或者模型代码中存在syntex错误。尝试在没有ajax的情况下调用模型方法进行测试,然后你就会看到错误。

答案 1 :(得分:0)

原来我的脚本不正确。为了将来参考像myseleft到jquery和ajax等其他新手。如果您希望脚本在页面打开时启动,请使用以下函数包装代码:

 $(document).ready(function(){
 });

此外,Codeigniter相关,将CSFR令牌转为false。 (仅用于开发目的,一旦您上线,出于安全原因,您需要将其设置为true)。我现在需要查看如何使用我的脚本并将CSFR令牌设置为true。