【问题标题】:Populate Dropdown based on another Dropdown Using Ajax, jQuery and Codeigniter使用 Ajax、jQuery 和 Codeigniter 基于另一个 Dropdown 填充 Dropdown
【发布时间】:2017-02-15 15:47:56
【问题描述】:

我只想问如何根据另一个下拉列表的值填充下拉列表。

当我选择一个广告系列时,它会在另一个下拉列表中显示该广告系列中人员的姓名,但值必须是名称的 ID。

这是我的模型

function get_agents($campaign_id)
{
    $campaign_id1 = mysqli_real_escape_string($this->db->conn_id,trim($campaign_id));
    $query = $this->db->query("SELECT tbl_employee.emp_id, CONCAT(tbl_applicant.fname, ' ', tbl_applicant.lname) AS fullname FROM tbl_applicant INNER JOIN tbl_employee ON tbl_employee.apid=tbl_applicant.apid INNER JOIN tbl_account ON tbl_employee.acc_id=tbl_account.acc_id WHERE tbl_account.acc_id='".$campaign_id1."'");
    return $query->result();
}

这是我的控制器

public function getAgents()
{
   $campaign_id = $this->input->post('campaign_id');
   $this->KudosModel->get_agents($campaign_id);
   echo $result;
}

这是我的 AJAX

$('#addCampaign').on('change', function(){
        $.ajax({
            type : 'POST',
            data : 'campaign_id='+ $('#addCampaign').val(),
            url : 'controller/method',
            success : function(data){
                $('#anyname').val(data);
            }
        });
    }); //I dont know what to do here

提前谢谢各位!

【问题讨论】:

  • 您没有将 $result 分配给控制器中的任何内容。
  • 你还没有提到代码是如何失败的。
  • anyname 下拉菜单中没有任何内容
  • 你试过console.log()吗?
  • success : function(data){ console.log(data); } 看看你的控制台会出现什么。

标签: javascript php jquery ajax codeigniter


【解决方案1】:

我认为您需要在控制器中进行一些操作,例如 -

public function getAgents()
{
   $campaign_id = $this->input->post('campaign_id');
   $employees = $this->KudosModel->get_agents($campaign_id);
   /*
   foreach($employees as $employee)
   {
       echo "<option value='".$employee->emp_id."'>".$employee->fullname."</option>"
   }*/
  // for json  
  $employeesList = [];
  foreach($employees as $employee)
  {
     array_push($employeeList,array('emp_id'=>$employee->emp_id,'fullnme'=>$employee->fullname));
  }
  echo json_encode($employeeList, JSON_FORCE_OBJECT);
}

现在在 ajax 成功函数中-

success : function(data){
        // anyname should be the id of the dropdown
        // $('#anyname').append(data);
        // for json 
        $json = JSON.parse(data);
        // empty your dropdown 
        $('#dropdownId').empty();
        $.each($json,function(key,value){
            $('#dropdownId').append('<option value="'+key+'">'+value+'</option>');
        })

}

【讨论】:

  • 欢迎提问。如果解决了请采纳为正确答案
  • 当我尝试提醒数据时,它会显示 但它不会填充另一个下拉列表。
  • 第二个下拉列表的id是什么,你接近解决方案,我会改变我的答案
  • 知道了,兄弟。原来我放置了错误的数据ID。哈哈。谢谢你,兄弟!你是一个祝福。我现在可以拥抱你了哈哈哈
  • 不客气......你也可以使用-$('#anyname').html(data);,每次它都会删除所有数据并添加新列表
【解决方案2】:

您可以简单地遍历您的数据并将选项添加到您的第二个 Select

$('#addCampaign').on('change', function(){
$.ajax({
    type : 'POST',
    data : 'campaign_id='+ $('#addCampaign').val(),
    url : 'controller/method',
    success : function(data){
        //data returns your name, iterate through it and add the name to another select
        $.each(data, function($index, $value) {
            $('#secondSelect').append($("<option></option>").val($value.id).html($value.name));
        });
    }
});
});

有一件事,如果您需要第二个&lt;select&gt; 上的侦听器,比如说on('click'),您需要在填充它后重新添加它。如果没有,Jquery 将无法识别新值。

编辑

另外,正如@PersyJack 所说,如果你想返回它,你需要将变量$result 分配给某个东西。

public function getAgents()
{
    $campaign_id = $this->input->post('campaign_id');
    $result = $this->KudosModel->get_agents($campaign_id);
    echo $result;
}

【讨论】:

  • 我如何分配它以返回它?这行得通吗? $data['agents'] = $this->KudosModel->get_agents($campaign_id); $this->load->view('kudoslist', $data);
  • 好吧,您的方法get_agents() 返回您的查询结果。但你从不使用它们。他们只是呆在虚空中,直到时间的尽头。如果要将它们返回给您的ajax请求,则需要将它们分配给一个变量,在您的情况下,您将返回变量$result,因此您需要将它们分配给$result
  • 您不必使用视图。您需要将数据返回到您的 Ajax,
  • 我尝试了 Veshraj Joshi 的建议,结果它返回了这个 -> 但它没有填充下拉菜单。有什么建议吗?
  • 好吧,在这种情况下,您需要删除 append() 中的内容,即 $("&lt;option&gt;&lt;/option&gt;").val($value.id).html($value.name) 及其周围的 for 以及 append() 数据
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多