【问题标题】:Showing subcategory based on the main category does not work with AJAX基于主类别显示子类别不适用于 AJAX
【发布时间】:2017-12-19 12:44:31
【问题描述】:

我的数据库中有一个汽车“品牌”和汽车“型号”表。当我回声汽车“制造”时,它可以正常工作。但是,我希望汽车“模型”下拉菜单显示为基于所选“品牌”的 ajax,它在视图中不起作用

但是,我需要的所有信息都显示在控制台的网络选项卡上。

问题可能出在哪里?这是我的ajax代码:

<script type="text/javascript">
var base_url = "<?php echo base_url();?>";

    $(document).ready(function() {
        $('select[name="make"]').on('change', function() {
            var makeid = $(this).val();
            if(makeid) {
                $.ajax({
                    url: base_url + 'myform/ajax/'+makeid,
                    type: "GET",
                    dataType: "json",
                    success:function(data) {
                        $('select[name="model"]').empty();
                        $.each(data, function(key, value) {
                            $('select[name="model"]').append('<option value="value.id">'+ 'value.title' +'</option>');
                        });
                    }
                });
            }else{
                $('select[name="model"]').empty();
            }
        });
    });
</script>

这里是视图:

<?php $attributes = array( 'name' => 'addcar', 'id' => 'addcar'); ?>
                  <?php echo form_open_multipart('cars/create', $attributes); ?>

                            <div class="form-group label-floating">
                                <label class="control-label">
                                    Марка
                                    <small>*</small>
                                </label>
                                <select id="make" name="make" class="selectpicker" data-style="select-with-transition" required="true">
                                    <option value=""></option>

                                    <?php foreach($makes as $make): ?>
                                    <option value="<?= $make['id']; ?>"><?= $make['maketitle']; ?></option>
                                <?php endforeach; ?>
                              </select>
                            </div>

                            <div class="form-group label-floating">
                                <label class="control-label">
                                    Модель
                                    <small>*</small>
                                </label>
                                <select id="model" name="model" class="selectpicker" data-style="select-with-transition" required="true">

                              </select>
                            </div>

</form>

【问题讨论】:

  • 我在响应中看不到任何名称属性,我只能看到一个标题?最重要的是,附加没有正确转义。像这样,您只需添加字符串(value.id、value.name)。由于您的选择是空的,您是否确认您完全处于成功状态?
  • 抱歉,已编辑...
  • 还是错应该是:''
  • 删除 $(document).ready(function() ,页面加载后超出范围
  • @AhmedSunny 该方法将事件绑定到选择字段,因此在就绪函数中运行它没有问题。

标签: php jquery ajax


【解决方案1】:

您正在追加到选择元素,但确实需要插入其中。只需在 select 中获取第一个(选项)元素,然后附加到该元素,如下所示:

<select>
<option id="firstOption">First Option</option>
</select>


$("#firstOption").append(...)

顺便说一句,为什么 value.title 在引号内?

+ 'value.title' +

【讨论】:

    【解决方案2】:

    我找到了解决问题的方法。当我使用“Creative Tim”管理仪表板时,他们有自己的课程。当我从选择部分中删除 class="selectpicker" 时,它起作用了。其实我也不知道他们之间有什么联系?

    【讨论】:

      【解决方案3】:

      您的值没有正确写入,您需要将响应中对象的属性与您尝试输出的内容相匹配:

      $('select[name="model"]').append('<option value="value.id">'+ 'value.title' +'</option>');
      

      应该是

      $('select[name="model"]').append('<option value="' + value.id + '">'+ value.modeltitle +'</option>');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多