2017-01-28 4 views
0

Я использую Codeigniter версии 3.0.6 с расширением модуля HMVC. (MX). Когда я пытаюсь сделать Ajax называют это показывает мне массаж ошибки 403.Как сделать ajax-вызовы в codeigniter HMVC

<script> 
var site = '<?=site_url()?>'; 
$('#item-name').keyup(function(){ 
    var d = $('#item-name').val(); 
    $('#item-list').css('display','block'); 
    $.post(site+"/moduleone/lists",{name: d}, function(data, status){ 
     $('#item-list').html(data); 
    }); 
}); 
</script> 

После выполнения этого кода я получаю и ошибка в хромированной консоли:

Failed to load resource: the server responded with a status of 403 (Forbidden) 

Модуль Метод:

public function lists() 
{ 
    echo 'afadfad'; 
    exit(); 
} 
+0

Что такое site_url()? –

+0

Функция codeigniter echo 'echo http: // localhost/admin/index.php' –

+0

вы эхо? потому что в CI-базе url получить метод «base_url()» –

ответ

0

Для использования base_url() и site_url() необходимо загрузить кодignign url helper.Like this.

$this->load->helper('url'); 

или вы можете загрузить его на application/config/autoload.php .Затем сделать свой ajax вызов, как это ...

<script type="text/javascript"> 
    $(document).ready(function(){ 
    url = '<? echo base_url('moduleone/lists');?>'; 

    $('#item-name').on('keyup',function(){ 
     var d = $('#item-name').val(); 
     $('#item-list').css('display','block'); 

     $.ajax({ 
      type:'POST', 
      url:url, 
      data: {name: d}, 
      success:function(data, status){ 
      $('#item-list').html(data); 
      } 
     }); 
    }); 
    }); 
</script> 

И в контроллере использовать $this->input->post('name'), чтобы ваше имя было отправлено из Ajax вызова. Как это.

public function lists() 
{ 
    $name = $this->input->post('name');// name sent from ajax 
    echo $name; 

} 
+0

Я уже добавляю URL-адрес помощника в автозагрузчик. Я пробовал ваше решение, но та же проблема. –

+0

Как вы управляете структурой папок для hmvc? –

+0

Приложение Codeigniter> modules> moduleone. В папке moduleone их три папки, называемые контроллером, моделью, представлением. –

0

Я нашел проблему. Я делаю codeigniter csrf true. Вот почему каждый раз, когда я отправляю форму, ей нужен токен csrf. Но по вызову ajax нет токена csrf, который обнаружил, почему он показывает ошибку аутентификации.

$config['csrf_protection'] = TRUE; 
$config['csrf_token_name'] = 'csrf'; 
$config['csrf_cookie_name'] = 'csrf_cookie'; 
$config['csrf_expire'] = 7200; 
$config['csrf_regenerate'] = TRUE; 
$config['csrf_exclude_uris'] = array(
    'moduleone/lists' 
); 

Если вы отключите (false csrf_protection), тогда он работает идеально.

Если вы хотите получить дополнительную информацию, ознакомьтесь с codeigniter user_guide.

Смежные вопросы