1

「ダイナミックコンボボックス」で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;
    }
}

ビューには2つのドロップダウンが含まれ、1つはメーカーを表示し、もう1つは対応するモデルを表示します。メーカーを選択した後、モデルが表示されません。Firebugは、プロセス中にエラーを表示しません。

すでにチェックされていること:jqueryが機能し、スクリプトが読み込まれます。

コントローラget_modelsは、この1:Corvette、2:Camaroのような配列を返すため、これも正しく機能しているようです。

どんな助けでもありがたいです、ありがとう!

4

2 に答える 2

0

問題の簡単な答えは、モデルでメソッドを複製しているということは、モデルでメソッドを2回定義しているということか、モデルコードにシンテックスエラーがあるということです。テストのためだけにajaxなしでモデルメソッドを呼び出してみてください。エラーが表示されます。

于 2012-11-06T08:55:33.357 に答える
0

私のスクリプトが間違っていたことがわかりました。myselefttojqueryやajaxのような仲間の初心者への将来の参照のために。スクリプトをページを開いた状態で開始する場合は、次の関数でコードをラップします。

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

また、Codeigniterに関連して、CSFRトークンをfalseに変更します。(開発目的のみ。ライブに移行したら、セキュリティ上の理由からtrueに設定する必要があります)。次に、CSFRトークンをtrueに設定してスクリプトを使用する方法を調べる必要があります。

于 2012-11-08T05:49:19.343 に答える