尝试使用Compay Name填充工作人员ID,但只有该公司中的第一个工作人员才会显示在下拉列表中

时间:2017-01-04 11:46:47

标签: php jquery json ajax codeigniter

这是代码Igniter中的视图页面代码。 我能够填充第二个下拉列表(worker Id),但问题是,只提取了第一个数据。由于它有超过50名工人,因此只有1名工人被提取。

$(document).ready(function() {
    $('#name_of').change(function() {
        var Worker_id = $('#name_of').val();
        $.ajax({
            type:'POST',
            data:{data:Worker_id},
            dataType:'text',
            url:"<?php echo base_url(); ?>supply_chain/get_filtered_names_for_time_card",
            success:function(result) {
                result = JSON.parse(result);
                $('#Worker').empty();
                for(i in result) {
                    $('#Worker').append("<option value='"+result[i]['Worker_id']+"'>"+result[i]['Worker_id']+" "+result[i]['Worker_name']+"</option>")
                }
            }
        });
    });
});

这是以上View的Controller功能,我试图通过该功能让所有工作人员都与所需的公司名称相关。

public function get_filtered_names_for_time_card() {
    $id = $this->input->post('data');
    $companyName = $this->supply_model->get_all_names_for_time_card();
    for($i = 0;$i < sizeof($companyName);$i++){
        if($companyName[$i]['company_name'] == $id){
            $data['companyNameOptions'] = [$companyName[$i]];
            break;
        }
    }
    echo json_encode($data['companyNameOptions']);
}

1 个答案:

答案 0 :(得分:2)

让查询只选择你想要的行会更好一点,但是你编写的代码的问题是你每次循环写入数据

同样,一旦找到company_name,您希望使用break终止for循环,这样您只需在生成的$data数组中添加一个

public function get_filtered_names_for_time_card()
{
    $id = $this->input->post('data');
    $companyName = $this->supply_model->get_all_names_for_time_card();
    for($i = 0;$i < sizeof($companyName);$i++){
        if($companyName[$i]['company_name'] == $id){
            $data['companyNameOptions'][] = $companyName[$i];
            // note here               ^^
            //break;
        }
    }
    echo json_encode($data['companyNameOptions']);
}

此外,$data数组不需要有子数组,因此上面的代码可以更简单明了地写成

public function get_filtered_names_for_time_card()
{
    $id = $this->input->post('data');
    $companyName = $this->supply_model->get_all_names_for_time_card();
    for($i = 0;$i < sizeof($companyName);$i++){
        if($companyName[$i]['company_name'] == $id){
            $data[] = $companyName[$i];
        }
    }
    echo json_encode($data);
}

在您的javascript中,如果您要返回JSON,请告诉ajax调用您正在执行此操作并且您可以忘记JSON.parse()

$(document).ready(function(){

      $('#name_of').change(function(){
          var Worker_id = $('#name_of').val();

          $.ajax({
              type:'POST',
              data:{data:Worker_id},

              //dataType:'text',
              dataType:'json',

              url:"<?php echo base_url(); ?>supply_chain/get_filtered_names_for_time_card",
              success:function(result)
              {
                  //result = JSON.parse(result);
                    $('#Worker').empty();
                    for(i in result){
                        $('#Worker').append("<option value='"+result[i]['Worker_id']+"'>"+result[i]['Worker_id']+" "+result[i]['Worker_name']+"</option>")
                    }
              }
          });
      });
  });