CodeIgniter路由问题.(将ajax路由附加到现有URL)

Ste*_*nno 0 ajax routing codeigniter

我正在尝试在视图中执行AJAX请求,用户提供了一些使用AJAX发送到服务器的输入,并且它应该去的功能是使用CodeIgniters路由进行路由的.

这是我在提出请求时目前所持的观点.

http://localhost:8888/companies/list
Run Code Online (Sandbox Code Playgroud)

在我的路由配置中,我在下面设置了这条路线来处理AJAX请求,该请求应该能够来自任何视图,并且仍然可以转到我指定的路由.

$route['test_ajax'] = "ajax/test_ajax";
Run Code Online (Sandbox Code Playgroud)

所以请求应该转到"ajax"控制器并使用函数"test_ajax",这应该使POST-url看起来像这样.

POST http://localhost:8888/test_ajax
Run Code Online (Sandbox Code Playgroud)

但我得到的是我正站在的当前URL,并且我已经指定的路由附加到URL完全崩溃我的响应来自AJAX请求,因为它甚至没有接近它应该的功能.我得到的POST-url看起来像这样.

POST http://localhost:8888/companies/test_ajax
Run Code Online (Sandbox Code Playgroud)

注意如何删除/ companies的参数.参数/ list在某个地方丢失了,虽然如果我在列表后面添加一个尾部斜杠,我也会在URL中获得list参数.

所以刚刚发生的事情是POST试图转向公司控制器并寻找功能test_ajax,它在ajax-controller中定义,而不是在公司控制器中定义.无论我在哪个URL,都会出现此错误,并且它始终遵循相同的模式.它会一直将我的route-URL附加到现有URL,而不是正确路由.

那么什么可能导致路由以这种方式运行,是否存在任何意外启用或任何设置的设置?因为我知道我在以前的项目中已经有数百次这样的工作.

提前致谢.

bes*_*eku 6

这是因为您的Javascript使用当前目录作为基础,并将AJAX URL附加到它.因为您(在公司目录中至少是客户端),它会将您的URL附加到此目录上.

如果您的Javascript是内联的,解决方案是使用base_url()PHP函数,而不是代码...

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

如果您的Javascript不是内联的,您可以使用PHP函数在HTML文档的顶部声明一个全局变量...

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

并在你的Javascript中的其他地方使用它...

var url = BASE_URL + 'test_ajax/'

或者,您可以只对您的基本网址进行硬编码,但这可能会让您的网站真正变得非常麻烦.