数据未填充到带有 AJAX 请求的选择标记中

Posted

技术标签:

【中文标题】数据未填充到带有 AJAX 请求的选择标记中【英文标题】:Data not populating in select tag with AJAX request 【发布时间】:2022-01-03 15:31:28 【问题描述】:

目前我有一个选择标签,每次用户单击该特定选择标签时,我都想通过 AJAX 调用填写该标签。为此,我正在执行以下操作:

查看类:

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

Ajax 请求:

$(document).ready(function()  

    $("#property").click(function()

    var post_url = 'listings/getonClick'
    $.ajax(
        type: "POST",
        url: post_url,
        data :  "hid" : $(this).val() ,
        success: function(response)
            $.each(response, function(value, key) 
                $("#property").append("<option id="+value.id+">"+value.name+"</option>");
            )
        
    );
);

控制器类:

function getonClick()

    $modelList = $this->listings_model->getProperties();

    echo(json_encode($modelList));

模型类:

 function getProperties()
    $this->db->select("id,name");
    $this->db->from("crm_project_properties");
    $query = $this->db->get();
    return $query->result_array() ;
 

但是在这样做之后,我在点击它之前甚至之后都无法在我的选择标签中获取任何数据

【问题讨论】:

检查控制台是否有错误。此外,在用户点击后填充选择听起来会很烦人 - 用户需要点击一次以填充选项,然后再次点击以实际打开列表。 @RoryMcCrossan 所以现在我有 3 个选择标签,每个标签大约有 30000 个条目,这使得页面加载非常缓慢。因此,我需要一种方法来最小化/删除它,方法是进行一些 AJAX 调用,以将其发送到另一个视图或其他东西。控制台中也没有错误 无论如何,拥有 30000 个条目的下拉菜单听起来像是糟糕的用户体验。尝试使用 Select2 之类的东西在用户输入内容时动态加载选项 @brombeer 好的,所以现在我已经在我的视图类中添加了 select2,但是当我检查源代码时,它仍然在一个选择中显示了 30000 行的选项 在这种情况下,您需要找到一种方法来减少该数据集。例如,您可以将 30k 项列表拆分为单独的类别,因此您可以先选择一些较小的下拉列表来过滤数据集。无论如何,这是您需要解决的真正问题。上述问题对于您遇到的主要问题是多余的,即数据权重。 【参考方案1】:

您可以尝试使用 .on("click") 吗? 它过去对我有用

$(document).ready(function () 
     $("#property").on("click", '*:not(a)', function() 
       var post_url = 'listings/getonClick'
         $.ajax(
           type: "POST",
           url: post_url,
           data :  "hid" : $(this).val() ,
           success: function(response)
                $.each(response, function(value, key) 
                   $("#property").append("<option id="+value.id+">"+value.name+"</option>");
           )
         
      );
);

【讨论】:

【参考方案2】:

您应该首先将您的响应编码为 JSON 对象

$(document).ready(function()  

    $("#property").click(function()

    var post_url = 'listings/getonClick'
    $.ajax(
        type: "POST",
        url: post_url,
        data :  "hid" : $(this).val() ,
        success: function(response)
            var responseText = JSON.parse(response);
            $.each(responseText , function(value, key) 
                $("#property").append("<option id="+value.id+">"+value.name+"</option>");
            )
        
    );
);

【讨论】:

以上是关于数据未填充到带有 AJAX 请求的选择标记中的主要内容,如果未能解决你的问题,请参考以下文章

带有滚动条的 HTML 文本框或区域,用 Ajax 响应填充

从服务器目录填充选择 PHP jQuery AJAX

Choices.js:将动态数据添加到选择选项中

当使用 json dict 填充数据表时,在 Jquery 中未检测到 Html 类标记

清除搜索结果后,Swift Tableview 搜索结果单元格选择复选标记未保存

带有循环和字符串选择器的未定义 ajax 帖子