You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击select触发AJAX请求后标签未填充数据问题排查求助

问题原因

  • 元素选择器不匹配:jQuery代码使用$("#property")选中元素,但你的select标签仅设置了name="property",未添加id="property"属性,JS无法找到目标元素,事件绑定完全不生效。
  • $.each遍历参数顺序错误:jQuery的$.each遍历数组时回调参数为(索引, 元素项),你写的function(value, key)中value是数组索引,不是数据对象,调用value.id必然报错。
  • 未设置AJAX返回数据格式:后端返回JSON字符串,前端没有指定dataType: "json"的话,会默认把返回值当作普通字符串处理,直接遍历会报错。
  • 重复追加选项问题:每次点击select都会发起请求,直接append会导致选项重复堆叠,没有清空旧数据的逻辑。
  • Select2插件渲染问题:你给select加了select2类,使用了Select2插件,原生JS追加option后,Select2不会自动更新视图,需要手动调用刷新方法。
  • 潜在的请求失败问题:如果你的CodeIgniter项目开启了CSRF防护,POST请求没有携带CSRF令牌会被框架拦截,请求直接失败;另外相对路径listings/getonClick可能出现路径匹配错误。
  • 无效参数传递:控制器方法没有用到POST传递的hid参数,该字段属于冗余传递。

修复方案

1. 视图层代码修改

给select标签添加id属性,匹配jQuery选择器:

<label class="control-labels ">Property</label>
<select id="property" name="property" class="form-control select2 selectsearch" <?php echo (isset($read) ? $read:''); ?> required>
</select>

2. AJAX请求代码修改

修复所有JS逻辑问题:

$(document).ready(function(){  
    // 用事件委托绑定,避免Select2渲染后事件失效
    $(document).on('click', '#property', function(){
        const $select = $(this);
        // 用CI的base_url生成绝对路径,避免路径错误
        const post_url = '<?= base_url("listings/getonClick") ?>';
        $.ajax({
            type: "POST",
            url: post_url,
            dataType: "json", // 指定返回格式为JSON
            // 如果开启CSRF,加上CSRF令牌字段,token名称和你CI配置保持一致
            data : { 
                "<?= $this->security->get_csrf_token_name() ?>" : "<?= $this->security->get_csrf_hash() ?>" 
            },
            beforeSend: function() {
                $select.empty(); // 请求前清空旧选项
            },
            success: function(response){
                // 修正参数顺序,item为返回的数据对象
                $.each(response, function(index, item) {
                    // 给option设置value属性,后续表单提交才能正常拿到选中值
                    $select.append(`<option value="${item.id}">${item.name}</option>`);
                });
                $select.trigger('change'); // 通知Select2更新渲染视图
            },
            error: function() {
                console.log('请求失败,请检查路径、接口权限配置');
            }
        });
    });
});

3. 控制器代码优化

指定返回的内容类型为JSON,避免浏览器识别异常:

function getonClick(){
    $modelList = $this->listings_model->getProperties();
    $this->output->set_content_type('application/json')
                 ->set_output(json_encode($modelList));
}

内容的提问来源于stack exchange,提问作者JAYZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:06:08