我正在尝试在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;
}
答案 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
上进行设置。
,您必须定义它才能知道base_url().
的确切值
您可以在application/config/config.php
上进行设置。
要测试base_url()
是否正常运行,请尝试回显base_url()。
{{3}}