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

时间:2010-02-01 07:56:06

标签: ajax codeigniter routing

尝试在视图中执行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中获得list参数。

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

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

提前致谢。

2 个答案:

答案 0 :(得分: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/'

或者,您可以只对您的基本网址进行硬编码,但这可能会让您感到非常麻烦。

答案 1 :(得分:1)

事实证明,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