Backbone.js模型urlRoot webapp文件夹名称被附加两次

时间:2013-07-13 14:42:43

标签: javascript codeigniter backbone.js

我正在开发一个名为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

请帮我找一个解决方案

2 个答案:

答案 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