在Codeigniter中使用Ajax的可靠下拉列表不起作用

时间:2019-02-06 06:20:29

标签: php ajax codeigniter mysqli

我正在尝试在codeigniter中使用ajax创建可靠的下拉列表。我使用了一个代码..但是它不起作用..值未附加到下拉列表中。从数据库检索数据到第一个下拉列表运行良好。第一个下拉列表工作正常...但是我想根据使用ajax的类别创建可靠的下拉列表子类别

控制器::

public function pdview()
{
   $this->load->helper('url');
   $this->load->helper('form'); 
   $this->load->model('AjaxpModel');
   $data['cnames'] = $this->AjaxpModel->getcat();
   $this->load->view('pd',$data);
}

public function getsubcaty()
{
   $postData = $this->input->post();
   $this->load->model('AjaxpModel');
   $data = $this->AjaxpModel->getsubcategory($postData);
   echo json_encode($data);
}

查看::

Category Name :   <select name="category" id="category">
                  <option value="">Select</option>
                  <?php
                     foreach($cnames as $catn){
                            echo "<option value='".$catn['catname']."'>".$catn['catname']."</option>";
                     }
                  ?>
                  </select><br><br>
Subategory Name :
                  <select name="subcategory" id="subcategory">
                     <option value="">Select</option>
                  </select><br><br>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type='text/javascript'>

var baseURL= "<?php echo base_url();?>";

$(document).ready(function(){
   // Category Change
   $('#category').change(function(){
      var cat = $(this).val();
      // AJAX request
      $.ajax({
         url:'<?=base_url()?>index.php/Ajaxuser/getsubcaty',
         method: 'post',
         data: {cat:cat},
         dataType: 'json',
         success: function(response){
            $('#subcategory').find('option').not(':first').remove();
               // Add options
               $.each(response,function(index,data){

                  $('#subcategory').append('<option value="'+data['subcatname']+'">'+data['subcatname']+'</option>');

               });
            }
      });
   });
});

型号:::

public function getcat()
{
   $this->load->database();
   $result=$this->db->select('cid,catname')->from('catc')->get()->result_array(); 
   $cname=array();
   foreach($result as $r)
   {
      $catname[$r['catname']] = $r['catname'];
   }
   $catname[''] = 'Select '; 
   return $catname; 
}

function getsubcategory($postData){
   $response = array();

   // Select record
   $this->db->select('scid,subcatname');
   $this->db->from('scatc');
   $this->db->where('catname', $postData['cat']);
   $q = $this->db->get();
   $response = $q->result_array();
   return $response;
}

1 个答案:

答案 0 :(得分:1)

首先检查您的base_url()是否定义正确。

当您按照我在评论部分中的步骤进行操作时,我想我在您的JS上看到了这个问题,

您可以尝试以下一种方法:

  $(document).ready(function(){

            // Category Change
            $('#category').change(function(){
                var cat = $(this).val();
                // AJAX request
                $.ajax({
                    url:'<?=base_url()?>index.php/Ajaxuser/getsubcaty',
                    method: 'post',
                    data: {cat:cat},
                    dataType: 'json',
                    success: function(response){

                var $el = $("#subcategory");

                 $el.empty();
                 $("#subcategory").val('');
                 $el.append($("<option></option>")
                        .attr("value", '')
                        .attr("hidden",'')
                        .text('Select Subcategory'));

                $.each(response, function(index, data){
                    $el.append('<option 
                    value="'+data.subcatname+'">'+data.subcatname+'</option>')
                });

                    }
                });
            });
        });

尝试一下之后,让我们看看你能到达那里。

  

在您的getsubcategory模型上,您忘记加载数据库。应该是这样的:

   $this->load->database();
  

在同一模型函数上,$postData[cat]仅应为$postData,因为您没有从控制器传递数组数据,否则将出现非法的字符串偏移量错误。

编辑: 既然我们已经发现问题是base_url()

配置是否加载了辅助程序'url',则可以在application/config/autoload.php上进行设置。

Configurations

,您必须定义它才能知道base_url().的确切值

您可以在application/config/config.php上进行设置。

要测试base_url()是否正常运行,请尝试回显base_url()。

{{3}}