adr*_*nmc 1 javascript ajax codeigniter
对于我网站上的每个用户,他们都有自己的个人资料页面,其中包含文章列表.当用户单击其中一个列表项时,会发生一个动画,然后AJAX调用会显示一个显示该文章的div.同时,我使用一些javascript来强制更改URL以反映这一点:
http://www.example.com/UserName/Hello-World-Article
Run Code Online (Sandbox Code Playgroud)
当用户在浏览器中单击后退按钮时,它会调用javascript函数来设置回到listview状态的动画.
到现在为止还挺好.但是,假设用户将上述URL输入到他们的地址栏并按回车,这里是一个问题:
如何将"UserName"和"Hello-World-Article"变量传递给Codeigniter并在此上下文中正确使用它们?
对不起,我对你的问题的措辞感到有点困惑,但我想我明白你要说的是什么.
第二: URI直接路由到控制器类名及其功能.
例如:
<?php
class Profile extends CI_Controller {
function item($username = NULL, $title = NULL)
{
if (is_null($username) || is_null($title)) redirect(base_url());
// blah run code where $username and $title = URI segement
}
}
Run Code Online (Sandbox Code Playgroud)
这将生成此URL:
http://www.example.com/profile/item/username/whatever-i-want
Run Code Online (Sandbox Code Playgroud)
然后你可以使用application/config/routes.php(docs)中的路由删除项目:
$route['(:any)'] = 'profile/item/$1';
Run Code Online (Sandbox Code Playgroud)
更好的方法(预读):
$route['profile/(:any)'] = 'profile/item/$1';
Run Code Online (Sandbox Code Playgroud)
最后,这将创建您要查找的URL:
http://www.example.com/username/whatever-i-want
//http://www.example.com/profile/username/whatever-i-want
Run Code Online (Sandbox Code Playgroud)
我可能需要仔细检查这一点是否存在语法错误,但这是Codeigniter路由工作原理的基础知识.一旦你的URL设置完毕,你可以用你的JS做任何你想做的事情.
但是,我强烈反对这种方法,因为路由这样的类几乎会使应用程序/站点的其余部分无用,除非这是你唯一的控制器/函数(可能不是这种情况).我认为只要在URL中以这样或那样的方式使用类名,你会更好.
或者,您也可以使用index()和$ this-> uri-> segment(),如果您想以非传统方式跳过路由.
<?php
class Profile extends CI_Controller {
function index()
{
$username = $this->uri->segment(1);
$title = $this->uri->segement(2);
}
}
Run Code Online (Sandbox Code Playgroud)
希望这有意义并帮助您解决问题.
| 归档时间: |
|
| 查看次数: |
8821 次 |
| 最近记录: |