У меня возникли проблемы с отправкой запроса ajax на контроллер кодирования. Он отбрасывает ошибку 404 Forbidden Access. Я нашел для меня какой-то аналогичный вопрос, но я не уверен, что его особенность в структуре CodeIgniter, а также решение в этом потоке не решило мою проблему. ниже мой запрос ajax. Мне интересно, что это, вероятно, связано с .htaccess корневой папки в папке приложения CI, но я не хочу менять свою конфигурацию по умолчанию.
Отправляет ли запрос ajax контроллеру CI правильный способ его реализации? если нет, любое предложение пожалуйста. Благодаря!
var ajax_load = '{loading gif img html}'; var ajax_processor = 'http://localhost/patientcare-v1/application/controller/ajax_processor/save_physical_info'; $("#save").click(function(){ $("#dialog-form").html(ajax_load); $.post( ajax_processor, $("#physical-info").serialize(), function(responseText){ $("#dialog-form").html(responseText); }, "json" ); });
Удалите <code>
и application/controller
из вашего ajax_processor
например,
var ajax_processor = 'http://localhost/patientcare-v1/index.php/ajax_porcessor/save_physical_info';
Если вы скрываете index.php
из url
с помощью htaccess
или routing
попробуйте этот URL,
var ajax_processor = 'http://localhost/patientcare-v1/ajax_porcessor/save_physical_info';
CodeIgniter использует csrf_protection , вы можете использовать его с Ajax и JQuery просто. Это (окончательное?) Решение работает по нескольким запросам Ajax (нет 403 😉 и сохраняет безопасность).
Откройте файл /application/config/config.php и измените строку $ config ['csrf_token_name'] на:
$config['csrf_token_name'] = 'token';
Вы можете использовать другое имя, но меняйте его везде в будущих шагах.
Добавить скрипт в виде; для меня в footer.php отображается код во всех представлениях.
<script type="text/javascript"> var CFG = { url: '<?php echo $this->config->item('base_url');?>', token: '<?php echo $this->security->get_csrf_hash();?>' }; </script>
Этот скрипт создает объект с именем CFG . Этот объект может использоваться в вашем Javascript-коде. CFG.url содержит URL вашего сайта и CFG.token … токен.
Добавьте этот код в свою часть $ (document) .ready (function ($) {—}) как
$(document).ready(function($){ $.ajaxSetup({data: {token: CFG.token}}); $(document).ajaxSuccess(function(e,x) { var result = $.parseJSON(x.responseText); $('input:hidden[name="token"]').val(result.token); $.ajaxSetup({data: {token: result.token}}); }); });
Этот скрипт инициализирует токен CSRF и обновляет его каждый раз, когда отправляется запрос Ajax.
Я создал новый контроллер под названием Ajax. В CodeIgniter используется ссылка http://www.domain.ltd/ ajax / foo
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Ajax extends CI_Controller { public function foo() { $this->send(array('foo' => 'bar')); } private function send($array) { if (!is_array($array)) return false; $send = array('token' => $this->security->get_csrf_hash()) + $array; if (!headers_sent()) { header('Cache-Control: no-cache, must-revalidate'); header('Expires: ' . date('r')); header('Content-type: application/json'); } exit(json_encode($send, JSON_FORCE_OBJECT)); } }
Функция отправки автоматически добавляет CSRF и преобразует массив в объект.
Теперь вы можете использовать Ajax с JQuery очень просто!
$.post(CFG.url + 'ajax/foo/', function(data) { console.log(data) }, 'json');
Результат:
{"token":"8f65cf8e54ae8b71f4dc1f996ed4dc59","foo":"bar"}
Когда запрос получает данные, CSRF автоматически обновляется до следующего запроса Ajax.
И вуаля !