【问题标题】:Dependable drop down list using ajax in codeigniter is not working在 codeigniter 中使用 ajax 的可靠下拉列表不起作用
【发布时间】:2019-06-30 01:22:45
【问题描述】:

我试图在 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;
}

【问题讨论】:

  • 嘿,在getsubcaty方法下检查你的Controller,将$postData = $this-&gt;input-&gt;post();更改为$postData = $this-&gt;input-&gt;post('cat');以及你的模型getsubcategory函数,不要将返回的数据存储到数组中,只需使用return $q-&gt;result() 以便它是 Object 形式 可以被正式编码的数据。
  • 只需从服务器端回显所有选项,在前端显示 .html() 很简单。
  • @Roshan 我按照你说的改变了..但是......该值仍然没有检索到下拉列表中:(
  • @DevsiOdedra 我也试过了
  • 所以你是否从服务器获得结果?

标签: php ajax codeigniter mysqli


【解决方案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()

配置是否加载了helper 'url',可以在application/config/autoload.php上设置。

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

你可以在application/config/config.php上设置。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 2016-09-27
  • 2016-12-02
  • 1970-01-01
  • 2022-11-22
  • 2017-10-16
  • 1970-01-01
相关资源
最近更新 更多