第二个选择取决于CodeIgniter

时间:2015-09-21 09:01:41

标签: php jquery ajax codeigniter

我希望我的第二个选择选项根据第一个选择中的选项而变化。 如果你选择“Skalman”你不能选择“午餐全天”,如果你选择“Lilleskutt”,你就不能选择“半天”。 我以前没有和AJAX合作,但认为这可能是正确的方法,如果有人能帮助我,我会非常感激!

我使用Booking.php中的两个函数从数据库中获取选项:

private function get_room_options() {

    $this->load->model('Booking_Model');
    $rooms = $this->Booking_Model->get();
    $rooms_form_options = array();

    // get room title and store in array
    foreach ($rooms as $id => $room) {
        $rooms_form_options[$id] = $room->title;
    }

    return array(
        'rooms_form_options' => $rooms_form_options,
    );
}

public function get_package_options() {

    $room = $this->input->post('searchData');

    $this->load->model('Package_Model');
    $packages = $this->Package_Model->get();

    $packages_form_options = array();

    foreach ($packages as $id => $package) {
        $packages_form_options[$id] = $package->package_name;

    }
    return array(
        'packages_form_options' => $packages_form_options,
    );
}

在我的booking.php中找到表格:

<?php
    echo form_open('booking/preview') ?>

    <div>
        <?php echo form_label('Conference Room: ', 'id') ; ?>
        <?php echo form_dropdown('id', $rooms_form_options, set_value('id')); ?>
    </div>
    <div>
        <?php echo form_label('Package type: ', 'package_id') ; ?>
        <?php echo form_dropdown('package_id', $packages_form_options, set_value('package_id')); ?>
    </div>
    <div>
        <?php echo form_label('Number of Participants: ', 'number_people') ; ?>
        <?php echo form_input('number_people', set_value('number_people')) ; ?>
    </div>
    <div>
        <?php echo form_submit('preview', 'Book'); ?>
    </div>

<?php echo form_close(); ?>

到目前为止我的剧本:

<script type="text/javascript">
$(function() {
    $(document).on('change', '[name=id]', function(e){
        var searchData = $(this).val();

        $.ajax({
            url: "<?php echo base_url('index.php/booking/get_package_options'); ?>",
            type: 'POST',
            data: searchData,
            success: function() {
                // how should I get the options in here? 
            }
        });
    });

});
</script>

2 个答案:

答案 0 :(得分:0)

CodeIgniter不支持ajax。有关更多说明http://phpframeworks.com/

答案 1 :(得分:0)

让我们从 view

开始
<?php echo form_open('booking/preview') ?>

    <div>
        <link rel="stylesheet" href="/css/bootstrap.min.css" />
        <?php echo form_label('Conference Room: ', 'id'), form_dropdown('id', $rooms_form_options, set_value('id')) ?>
    </div>
    <div>
        <?php echo form_label('Package type: ', 'package_id'), form_dropdown('package_id', $packages_form_options, set_value('package_id')) ?>
    </div>
    <div>
        <?php echo form_label('Number of Participants: ', 'number_people'), form_input('number_people', set_value('number_people')) ?>
    </div>
    <div>
        <?php echo form_submit('preview', 'Book') ?>
    </div>

<?php echo form_close() ?>
  

这里通过删除尾随分号和&amp;来优化您的代码。多重回声   单一陈述。

现在位于 js 部分

$(function() {
    $(document).on('change', '[name=id]', function(e){
        var searchData = $(this).val();
        $.post('YOUR_SEARCH_URL', { data : searchData }).done(function(data, textStatus, jqXHR) {
            var h = '';
            $(data.YOUR_SERVER_RESPONSE_KEY).each(function(i, v){
                h += '<option value="' + i + '">' + v + '</option>'
            });
            $('[name=package_id]' ).html(h);
        }).error(function(jqXHR, textStatus, errorThrown) {
            //Handle your ajax error
        });
    });

});

现在在 controller

public function YOUR_CONTROLLER_ACTION() {
    $data = $this->input->post('data');
    //Do your work & get data from model for the id

    //now send json response
    return $this->output
        ->set_content_type('application/json')
        ->set_output(json_encode(YOUR_JSON_RESPONSE_ARRAY));
}

检查这两个链接http://code.runnable.com/UXczcazDrMMiAAGl/how-to-do-ajax-in-codeigniter-for-php&amp; http://code.tutsplus.com/tutorials/codeigniter-from-scratch-day-8-ajax--net-9243了解更多详情