2016-03-30 17 views
0

Nakavt js tıklama ciltleme yoluyla bir düğmeye tıklayarak ajax posta yöntemi ile bir kullanıcı formu göndermeye çalışıyorum. Aldığım hata 403 - Yasaktır.CSRF ve ajax formu knockout js tıklama kodlama 3 kullanarak gönderin - Yasak hata

Bunun CSRF ile bir ilgisi olduğuna, ancak bunu çözemediğine eminim.

View.php:

düğmeyi tıklamak üzerinde
<?php echo form_open('client/search_client_database', ['role' => 'form']); ?> 
    <fieldset> 
    <div class="form-group"> 
     <label class="sr-only" for="search_client_input">Search for existing clients</label> 
     <div class="input-group"> 
     <input class="form-control input-sm" type="text" id="search_client_input" name="search_client_input" placeholder="Search for existing clients..."> 
     <span class="input-group-btn"> 
      <button class="btn btn-primary btn-sm" type="button" data-bind="click: search_client">Search</button> 
     </span> 
    </div> 
    </div> 
    </fieldset> 
<?php echo form_close(); ?> 

, Js tıklama kontrolöre bir ajax çağrısı başlatmak için trigged edilir bağlayıcı nakavt. Nakavt js kodu, görünümle birlikte yüklenen ayrı bir js dosyasındadır.

Client.js Dosya:

var base_url = window.location.origin; 
var url = base_url+"/client/"; 

this.search_client = function() 
     {   
      crsf = $("input[name=csrf_test_name]").val(); 
      dataString = $("#search_client_input").val(); 
      alert(crsf); 
      $.ajax({ 
       url: url+"search_client_database", 
       type: "post", 
       cache: false, 
       data: {crsf: crsf, data: dataString}, 
       success: function(customer_details) { 
        alert(customer_details);      
       }, 
       error: function(xhr, ajaxOptions, thrownError) 
       { 
        alert(xhr.status); 
        alert(thrownError); 
       } 
      }); 
     } 

Denetleyici:

public function search_client_database() 
    { 
     $data = $this->input->post('data'); 
     echo $data; 
    } 

ben almaya devam xhr hatası 403 yani Yasak. URL'de yanlış bir şey yok.

+1

: Eğer Ajax isteği data bu kullanmak gerekir bu yüzden, csrf_test_name denir kodunuzda dayalı durumda

$ config ['csrf_token_name'] 'olarak yapılandırıldı. Yani veri ile çalışın: {"csrf_test_name": crsf, data: dataString}, ' – nemesv

cevap

1

Csrf belirtecini $config['csrf_token_name'] içinde yapılandırılmış olanla aynı ada sahip olarak geri göndermeniz gerekir. Sen ne aynı adla csrf jetonu geri göndermek zorunda

$.ajax({ 
    url: url + "search_client_database", 
    type: "post", 
    cache: false, 
    data: { 
    "csrf_token_name": crsf, 
    data: dataString 
    }, 
    success: function(customer_details) { 
    alert(customer_details); 
    }, 
    error: function(xhr, ajaxOptions, thrownError) { 
    alert(xhr.status); 
    alert(thrownError); 
    } 
});