我正在开发一个名为shelfari的backbone.js + codeigniter的网络应用程序 目录结构如下
Dir structure http://img46.imageshack.us/img46/2506/c180.png
我已将“shelfari”文件夹放在htdocs中并以
的身份访问网站http://localhost/shelfari/
调用model.save方法时,我想发送一个帖子请求到
POST http://localhost/shelfari/codeigniter/index.php/bookapp
所以我这样定义我的模型
var BookItem = Backbone.Model.extend({
urlRoot:'codeigniter/index.php/bookapp/',
但它发送了一个帖子请求
POST http://localhost/codeigniter/index.php/bookapp/ 404 not found
所以我重新定义了网址
var BookItem = Backbone.Model.extend({
urlRoot:'shelfari/codeigniter/index.php/bookapp/',
然后它也发送一个帖子请求
POST http://localhost/shelfari/shelfari/codeigniter/index.php/bookapp/ bad error
我要做的是发送请求
POST http://localhost/shelfari/codeigniter/index.php/bookapp
请帮我找一个解决方案
答案 0 :(得分:0)
urlRoot="codegigniter/"
您使用的是前缀斜杠,假设您正在访问localhost文档根目录。当您不使用该斜杠时,路径将放在您当前的URL之后。
Host: localhost/shelfari
urlRoot = "/codigniter"
制作最终网址localhost/codeigniter
,因为您使用了斜杠
Host: localhost/shelfari
urlRoot = "codigniter" (note the missing slash)
制作最终网址localhost/shelfari/codeigniter
,因为urlRoot会附加到shelfari。
最佳做法是使用绝对路径,因此使用斜杠。因此,您的urlRoot的最佳选择是/shelfari/codeigniter/......
我建议您使用Windows主机文件,这样您就可以获得一个干净的网址,这些问题不再存在。
请修改你的帖子格式,很难阅读
答案 1 :(得分:0)
尝试在网址前添加“/”:“/ shelfari / codeigniter / index.php / bookapp /”
另外两项建议:
1)您是否考虑在root中使用.htaccess文件将index.php插入到请求网址中?我相信它是Codeigniter的最佳实践,它允许您使用更清晰的URL而不使用URL的“index.php”段。请参阅下面的示例。
2)你在使用“bookapp”控制器的索引功能吗?如果没有,您可能会错过网址中的某个细分受众群。您的网址应遵循以下模式:
http://www.domainname.com/index.php/controllername/functionname
,
其中controllername
是包含您正在调用的函数的控制器的名称,functionname
是控制器中函数的名称。
如果您格式化.htaccess文件并将其放在根目录中,则可以从URL中删除index.php以获得更清晰的http://www.domainname.com/controllername/functionname