2016-10-21 14 views
0

私はクエリ結果をフィルタリングするフォームを持っています。それは単に日付に基づくフィルタです。どういうわけか、私の入力値はコントローラに送信されませんが、私はそれをログに記録するとき、私は期待どおりの値を示しています。ajaxからの入力値がコントローラに送信されません

マイビュー:

<form action="" method="post" id="cashback"> 
User Email : 
<input type="text" name="email" id="email"> 
<br><br> 
Booking Date : 
<div id="reportrange" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; display:inline"> 
    <span></span> <b class="caret"></b> 
</div> 
<input type="hidden" name="input_date_from" id="input_date_from" value=""> 
<input type="hidden" name="input_date_to" id="input_date_to" value=""><br><br> 
<button type="button" class="btn btn-primary" onclick="promotion()">View</button> 
<br><br> 
</form> 
<script> 
function promotion() { 

email = $('#email').val(); 
input_date_from = $('#input_date_from').val(); 
input_date_to = $('#input_date_to').val(); 

$.ajax 
    ({ 
     url : "<?php echo site_url('admin/check_promotion')?>", 
     type: "POST", 
     dataType: "text", 
     data:{email: email, input_date_to: input_date_to, input_date_from: input_date_from}, 
     success: function(data) 
     { 
      console.log(email); 
      console.log(input_date_from); 
      console.log(input_date_to); 
      window.location.href = "<?php echo site_url('admin/check_promotion')?>"; 
     } 
    }); 
} 
</script> 

マイコントローラ:

public function check_promotion() 
{ 
    if(!$this->user_permission->check_permission())return; 

     $data['startDate'] = $this->input->post('input_date_from'); 
     $data['endDate'] = $this->input->post('input_date_to'); 
     $email = $this->input->post('email'); 

     $this->db->select('a.booking_id as booking_id, a.from_email as from_email, a.booking_date as booking_date, a.status as status, b.vendor_airway_bill as awb, b.tariff as tariff'); 
     $this->db->from('booking as a'); 
     $this->db->join('shipment as b','a.booking_id = b.booking_id','left'); 
     $this->db->where('booking_date >=', date('Y-m-d',strtotime($data['startDate']))); 
     $this->db->where('booking_date <=', date('Y-m-d',strtotime($data['endDate']))); 
     $this->db->where('from_email', $email); 
     $this->db->where('status = 1'); 
     $this->db->or_where('status = 2'); 
     $this->db->limit('300'); 
     $query = $this->db->get(); 
     $data['result'] = $query->result_array(); 

     $this->template->render('admin/promotion',$data,'admin'); 
} 

それは私に入力emailinput_range_to、およびinput_range_fromを無視してすべての行を提供します。参考までに、jQuery daterangepickerを使用しています。私は何を間違えたのですか?

<script> 
function promotion() { 

    email = $('#email').val(); 
    input_date_from = $('#input_date_from').val(); 
    input_date_to = $('#input_date_to').val(); 

    $.ajax 
    ({ 
    url : "<?php echo site_url('admin/check_promotion')?>", 
    type: "POST", 
    dataType: "text", 
    data:{email: email, input_date_to: input_date_to, input_date_from: input_date_from}, 
    success: function(data){ 
     console.log(email); 
     console.log(input_date_from); 
     console.log(input_date_to); 
     window.location.href = "<?php echo site_url('admin/check_promotion')?>"; 
    } 
    }); 
    return false; 
} 
</script> 
  • は、あなたがプロモーションの関数の前にreturnを追加する必要があります

  • +0

    ;'この行 '$クエリ下=あなたのコントローラに$ this-> db-> get(); 'を入力し、ここにクエリを表示してください(コンソールで見つけることができます) –

    答えて

    0

    あなたは

    1. あなたは次のようにjavascript関数promotionreturn falseすべきボタンのクリックイベントのデフォルト動作を避ける必要があります次のように電話してください:

      <button type="button" class="btn btn-primary" onclick="return promotion()">View</button> 
      

    OR:あなたは次のように別の解決策を試すことができます。この `エコーます$ this-> DB-> last_query() 'の戻りを入れ

    <form action="" method="post" id="cashback"> 
    User Email : 
    <input type="text" name="email" id="email"> 
    <br><br> 
    Booking Date : 
    <div id="reportrange" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; display:inline"> 
        <span></span> <b class="caret"></b> 
    </div> 
    <input type="hidden" name="input_date_from" id="input_date_from" value=""> 
    <input type="hidden" name="input_date_to" id="input_date_to" value=""><br><br> 
    <button type="button" id="btn-submit" class="btn btn-primary">View</button> 
    <br><br> 
    </form> 
    <script> 
    $('#btn-submit').click(function(e){ 
        e.preventDefault(); 
    
        email = $('#email').val(); 
        input_date_from = $('#input_date_from').val(); 
        input_date_to = $('#input_date_to').val(); 
    
        $.ajax({ 
        url : "<?php echo site_url('admin/check_promotion')?>", 
        type: "POST", 
        dataType: "text", 
        data:{email: email, input_date_to: input_date_to, input_date_from: input_date_from}, 
        success: function(data) 
        { 
         console.log(email); 
         console.log(input_date_from); 
         console.log(input_date_to); 
         window.location.href = "<?php echo site_url('admin/check_promotion')?>"; 
        } 
        }); 
    }); 
    </script> 
    
    +0

    私の質問を編集してお答えいただきましたが、同じ結果。どういうわけか、入力ポストからの値がコントローラーに送信されなかったので、 'email'と日付の範囲は無視されます:( – may

    0
    Following code is useful to send the data from view to controller using ajax. 
    
        <script> 
        function promotion() { 
         $.ajax 
         ({ 
         url : "<?php echo site_url('admin/check_promotion')?>", 
         type: "POST", 
         data:$('#cashback').serialize(), //$('#cashback') is the form id 
         success: function(){ 
          location.reload(); // This will refresh the page after submit or you can do whatever you want. 
         } 
         }); 
        } 
        </script> 
    
        Now, You Can get the Posted date in your controller or model using the input field name like 
    
        $email    = $this->input->post('email'); 
        $input_date_from = $this->input->post('input_date_from'); 
        $input_date_to  = $this->input->post('input_date_to'); 
    
        Thanks, 
    
    +0

    あなたの応答のおかげで、より良い結果が他のページに表示されますか?私は 'window.location.href'を使用しています:( – may

    関連する問題