2017-04-24 87 views
1

我想將複選框的值發佈到控制器使用ajax。但是我發送的數據在控制器中總是空的。阿賈克斯發佈數據到控制器不工作,Codeigniter

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

你是不是想多選中的複選框值傳遞給位指示? –

+0

是的,我將該值分配給文本框字段,然後將其傳遞給控制器​​。 – Nutan

+0

是否有任何特殊目的將其分配給隱藏字段? –

回答

1

我無法完全弄清楚你正在嘗試做什麼。它看起來像這樣的東西: $(「#sangli」)。change(function(){ });

您正在嘗試分配事件偵聽器,但將其放入名爲updateregion()的函數中,當您單擊該複選框時會調用它。

我認爲你需要將.change()函數移到你的updateregion函數之外。儘管如此,我真的不知道你在做什麼。

我的Web控制檯告訴我,沒有定義的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行左右。

如果事情正在這裏丟了,我也不會感到驚訝: $這個 - >輸入 - >後( 'filterbyregion')

爲什麼不乾脆$ _ POST [ 'filterbyregion']?

如果您沒有嘗試在一行中執行許多不同的操作,而只是執行一個操作,那麼解析錯誤實際發生的位置會比較容易。

+0

我想根據選中的複選框篩選我的結果。複選框'sangli將過濾我的數據爲桑利地區等。我已經嘗試使用$文檔。ready(function(){// my code}但是它不起作用 – Nutan

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

} 
+0

Hi Ahmed,感謝您的快速響應!我試過了給定的代碼,但它不起作用,既沒有提供任何錯誤也沒有顯示任何東西。 – Nutan

+0

Are you sure ajax request is firing to controller? –

+0

Ajax request is not firing controller for your given code。 – Nutan