我正在尝试使用ajax将checkbox的值发布到控制器。但是我发送的数据在控制器中总是空的。
my_view.php
<div class="regions">
<label class="check-inline">
<input type="checkbox" id="sangli" name="region[]" value="Sangli" class="category"
onclick="javascript:updateregion()"
> Sangli</label><br>
<label class="check-inline">
<input type="checkbox" id="satara" name="region[]" value="Satara" class="category"
onclick="javascript:updateregion()"
>Satara</label><br>
<label class="check-inline">
<input type="checkbox" id="kolhapur" name="region[]" value="Kolhapur" class="category"
onclick="javascript:updateregion()"
>Kolhapur</label><br>
<label class="check-inline">
<input type="checkbox" id="solapur" name="region[]" value="Solapur" class="category"
onclick="javascript:updateregion()"
>Solapur</label><br>
<input type="hidden" name="filterbyregion" id="filterbyregion">
<script type="text/javascript">
function updateregion() {
$("#sangli").change(function() {
if($(this).prop("checked")) {
var textbox = $(this).val();
document.getElementById("filterbyregion").value = textbox;
//document.filters.submit();
alert(textbox);
jQuery.ajax({
url: '<?php echo site_url();?>resource_controller/view_div',
type: 'POST',
cache: false,
data: {"filterbyregion": textbox},
dataType: 'text',
success: function() {
alert(textbox);
$('#filter_div').load('<?php echo site_url();?>resource_controller/view_div');
},
error: function(error) {
console.log(error);
alert(error);
}
});
}
});
$("#satara").change(function() {
if($(this).prop("checked")) {
var textbox = $(this).val();
document.getElementById("filterbyregion").value = textbox;
//document.filters.submit();
alert(textbox);
jQuery.ajax({
url: "<?php echo site_url();?>resource_controller/view_div",
type: "POST",
cache: false,
data: {"filterbyregion": $("#sangli").val()},
dataType: "text",
success: function() {
alert(textbox);
$('#filter_div').load('<?php echo site_url();?>resource_controller/view_div');
},
error: function(error) {
console.log(error);
alert(error);
}
});
}
});
$("#kolhapur").change(function() {
if($(this).prop("checked")) {
var textbox = $(this).val();
document.getElementById("filterbyregion").value = textbox;
//document.filters.submit();
alert(textbox);
jQuery.ajax({
url: '<?php echo site_url();?>resource_controller/view_div',
type: 'POST',
cache: false,
data: {"filterbyregion": textbox},
dataType: 'text',
success: function() {
alert(textbox);
$('#filter_div').load('<?php echo site_url();?>resource_controller/view_div');
},
error: function(error) {
console.log(error);
alert(error);
}
});
}
});
$("#solapur").change(function() {
if($(this).prop("checked")) {
var textbox = $(this).val();
document.getElementById("filterbyregion").value = textbox;
//document.filters.submit();
alert(textbox);
jQuery.ajax({
url: '<?php echo site_url();?>resource_controller/view_div',
type: 'POST',
cache: false,
data: {"filterbyregion": textbox},
dataType: 'text',
success: function() {
alert(textbox);
$('#filter_div').load('<?php echo site_url();?>resource_controller/view_div');
},
error: function(error) {
console.log(error);
alert(error);
}
});
}
});
</script>
</div>
My_controller.php
public function view_div() {
$rgn = str_replace(",", "','", $this->input->post('filterbyregion'));
$rank = str_replace(",", "','", $this->input->post('ranking'));
$exp = str_replace(",", "','", $this->input->post('selexperiance'));
$qual = str_replace(",", "','", $this->input->post('qualification'));
$sk = str_replace(",","','", $this->input->post('multiskills'));
if($rgn != ""){
$this->q['h'] = $this->resource_model->search_users($sk,$rgn,$qual,$exp,$rank);
$this->q['state'] = $this->place_model->get_state();
$this->q['district'] = $this->place_model->get_district();
$this->q['taluka'] = $this->place_model->get_taluka();
$this->q['courses'] = $this->course_model->get_all_course_names();
if(isset($this->q['h']) && $this->q['h']->num_rows() > 0)
{
$this->load->view('/web/filtered_resources', $this->q);
}
}
return array();
}
我的div正在加载,但没有预期的结果数据。
下面是我之前尝试的另一个脚本。这可以澄清我的目的:
<script type="text/javascript">
$.noConflict(document).ready(function() {
var textbox = "";
var rgns = [];
if(document.getElementById('sangli').checked) {
if (textbox == "") {
textbox += "Sangli";
} else {
textbox += ", Sangli";
}
rgns.push('sangli');
}
if(document.getElementById('satara').checked) {
if (textbox == "") {
textbox += "Satara";
} else {
textbox += ", Satara";
}
rgns.push('satara');
}
if(document.getElementById('kolhapur').checked) {
if (textbox == "") {
textbox += "Kolhapur";
} else {
textbox += ", Kolhapur";
}
rgns.push('satara');
}
if(document.getElementById('solapur').checked) {
if (textbox == "") {
textbox += "Solapur";
} else {
textbox += ", Solapur";
}
rgns.push('satara');
}
document.getElementById('filterbyregion').value = textbox;
// document.filters.submit();
jQuery.ajax({
url: '<?php echo site_url();?>resource_controller/view_div',
type: "POST",
data: {"txt": textbox},
success: function() {
$('#filter_div').load('<?php echo site_url();?>resource_controller/view_div');
},
error: function(error) {
console.log(error);
}
});
});
</script>
答案 0 :(得分:1)
我无法完全弄清楚你要做什么。它看起来像这样的东西: $(“#sangli”)。change(function(){ });
您正在尝试分配事件侦听器,但是将其放在名为updateregion()的函数中,当您单击该复选框时会调用该函数。
我认为你需要在updateregion函数之外移动.change()函数。我真的不知道你在那里想做什么。
我的网络控制台告诉我updateregion()函数没有定义,所以也许你想把js放在文件的开头,把它全部放在这里:
$(document).ready(function(){
//assign event listeners here
});
这将确保在文档完全加载之前不会发生任何事情。否则,部分javascript可能会在加载整个页面之前执行。
使用firefox和工具 - > Web开发人员 - > Web控制台,您将获得更多信息。另外,检查你的php错误日志,通常在/var/log/apache2/error.log中。在linux中,您可以使用“tail -f error.log”命令查看最后20行左右。
如果有什么东西丢失在这里我也不会感到惊讶: $这 - &GT;输入 - &GT;柱( 'filterbyregion')
为什么不只是$ _POST ['filterbyregion']?
如果您没有尝试在一行中执行许多不同的操作,而只是尝试一个操作,那么您可以更轻松地剖析错误实际发生的位置。
答案 1 :(得分:1)
试试此代码
<div class="regions">
<label class="check-inline">
<input type="checkbox" id="sangli" name="region[]" value="Sangli" class="category"
> Sangli</label><br>
<label class="check-inline">
<input type="checkbox" id="satara" name="region[]" value="Satara" class="category"
>Satara</label><br>
<label class="check-inline">
<input type="checkbox" id="kolhapur" name="region[]" value="Kolhapur" class="category"
>Kolhapur</label><br>
<label class="check-inline">
<input type="checkbox" id="solapur" name="region[]" value="Solapur" class="category"
>Solapur</label><br>
<input type="hidden" name="filterbyregion" id="filterbyregion">
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<script type="text/javascript">
$(".category").change(function() {
var textbox = $(this).val();
//document.getElementById("filterbyregion").value = textbox;
$('#filterbyregion').val(textbox);
/*Fetching multi value from checkbox*/
var data1 = [];
$(":checked").each(function() {
data1.push($(this).val());
});
console.log(data1);
//document.filters.submit();
//alert(data1);
$.ajax({
url: 'resource_controller/view_div',
type: 'POST',
cache: false,
data: {"filterbyregion": data1},
dataType: 'text',
success: function(data) {
alert(data);
/*$('#filter_div').load('<?php echo site_url();?>resource_controller/view_div');*/
},
error: function(error) {
console.log(error);
alert(error);
}
});
});
</script>
在控制器上:
public function view_div() {
/*Array of checked checkbox value*/
$rgn = $this->input->post('filterbyregion');
print_r($rgn);
}