Проблема маршрутизации CodeIgniter. (добавляет AJAX маршрут к существующему URL) - PullRequest
0 голосов
/ 01 февраля 2010

Я пытаюсь выполнить AJAX-запрос в представлении, пользователь дает некоторый ввод, который отправляется на сервер с AJAX, и функция, на которую он должен идти, маршрутизируется с маршрутами CodeIgniters.

Это вид, в котором я сейчас нахожусь, когда делаю запрос.

http://localhost:8888/companies/list

В моей конфигурации маршрута я установил этот маршрут ниже для обработки AJAX-запроса, который должен быть в состоянии прийти из любого вида и при этом иметь возможность идти по указанному мною маршруту.

$route['test_ajax'] = "ajax/test_ajax";

Таким образом, запрос должен идти к «ajax» -контроллеру и использовать функцию «test_ajax», которая должна заставить POST-url выглядеть следующим образом.

POST http://localhost:8888/test_ajax

Но вместо этого я получаю текущий URL-адрес, по которому я стою, и указанный мною маршрут добавляется к URL-адресу, полностью разрушающему мой ответ на AJAX-запрос, поскольку он даже близко не подходит к функции должен. POST-URL, который я получаю, выглядит следующим образом.

POST http://localhost:8888/companies/test_ajax

Обратите внимание, как был удален параметр / companies. Аргумент / список где-то был потерян, хотя, если я добавляю косую черту после списка, я получаю аргумент списка и в URL.

Итак, что только что произошло, POST пытается перейти к контроллеру компаний и искать функцию test_ajax, которая определена в контроллере ajax, а не в контроллере компаний. Эта ошибка возникает независимо от того, по какому URL я нахожусь, и она всегда следует одному и тому же шаблону. Он продолжает добавлять мой маршрутный URL к существующему URL вместо правильной маршрутизации.

Так что может быть причиной того, что маршрутизация ведет себя таким образом, есть какие-либо настройки, которые случайно включены или что-то еще? Потому что я знаю, что у меня это работало сотни раз в предыдущих проектах.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 01 февраля 2010

Это потому, что ваш Javascript использует текущий каталог в качестве базы и добавляет к нему URL AJAX. Поскольку вы находитесь (по крайней мере на стороне клиента) в каталоге компаний, он добавляет ваш URL к этому.

Решение, если ваш Javascript встроен, это просто использовать PHP-функцию base_url () с кодом ...

var url = '<?= base_url(); ?>test_ajax/'

Если ваш Javascript не встроен, вы можете объявить глобальную переменную в верхней части HTML-документа, используя функцию PHP ...

var BASE_URL = '<?= base_url(); ?>'

И используйте это везде в вашем Javascript ...

var url = BASE_URL + 'test_ajax/'

В качестве альтернативы, вы можете просто жестко закодировать ваш базовый URL, но это может очень быстро запутаться.

1 голос
/ 01 февраля 2010

Оказывается, CodeIgniter интерпретировал это как относительную ссылку из-за того, что не было косой черты заголовка. Руководство пользователя CodeIgniter гласит, что в конфигурации маршрутов не должно быть написано ни заголовка, ни конечных слешей.

Что решило эту проблему, так это добавив косую черту в java-URL.

$.ajax({
    url: "/test_ajax",
    type: "POST",
    data: data,
    success: function(data){
        console.log(data);
    }
});

Это заставляет CI интерпретировать это как абсолютный URL и дает мне URL, который я искал.

POST http://localhost:8888/test_ajax
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...