Ajax发布数据到控制器无法正常工作,Codeigniter

时间:2017-04-24 07:19:10

标签: jquery ajax codeigniter

我正在尝试使用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>

2 个答案:

答案 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);

}