【问题标题】:Backbone.js model urlRoot webapp folder name getting appended twiceBackbone.js 模型 urlRoot webapp 文件夹名称被附加两次
【发布时间】:2013-07-13 14:42:43
【问题描述】:

我正在开发一个名为shelfari的带有backbone.js +codeigniter的网络应用程序 目录结构如下

Dir structure http://img46.imageshack.us/img46/2506/c180.png

我已将“shelfari”文件夹放在 htdocs 中,并以

身份访问网站
http://localhost/shelfari/

当调用 model.save 方法时,我想向

发送一个 post 请求
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 

然后我重新定义了 url

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

请帮我找到解决办法

【问题讨论】:

    标签: javascript codeigniter backbone.js


    【解决方案1】:

    尝试在 URL 前加一个“/”:“/shelfari/codeigniter/index.php/bookapp/”

    另外两个建议:

    1) 您是否考虑在您的根目录中使用 .htaccess 文件将 index.php 插入到您的请求 URL 中?我相信这是 Codeigniter 的最佳实践,它允许您使用更简洁的 URL,而无需 URL 的“index.php”段。请参阅下面的示例。

    2) 您是否使用“bookapp”控制器的索引功能?如果没有,您的 URL 中可能缺少一个片段。您的 URL 应遵循以下模式: http://www.domainname.com/index.php/controllername/functionname, 其中controllername 是包含您正在调用的函数的控制器的名称,functionname 是控制器中函数的名称。 如果您格式化 .htaccess 文件并将其放在根目录中,则可以从 URL 中删除 index.php 以获得更简洁的http://www.domainname.com/controllername/functionname

    【讨论】:

    • 嘿,thnkx semanticMike 把 / 放在 url 前面起作用了:D
    【解决方案2】:
    urlRoot="codegigniter/"
    

    您使用的是前缀斜杠,它假定您指向 localhost 文档根目录。当您不使用该斜线时,路径将放置在您当前的 url 之后。

    Host: localhost/shelfari
    urlRoot = "/codigniter"
    

    因为你使用了那个斜线,所以最终的 url localhost/codeigniter

    Host: localhost/shelfari
    urlRoot = "codigniter" (note the missing slash)
    

    制作最终的 url localhost/shelfari/codeigniter,因为 urlRoot 将被附加到shelfari。

    最佳做法是使用绝对路径,因此使用斜线。因此,您的 urlRoot 的最佳选择是 /shelfari/codeigniter/......

    我建议你使用windows主机文件,这样你就可以得到一个干净的url,这些问题不再存在了。

    请修正你的帖子格式,它很难阅读

    【讨论】:

    • 嘿 LHolleman 我已经编辑了我的问题,所以请你撤销我的答案 -1 以及为什么只是 windows !我需要一个独立于平台的答案,我想我犯了一些愚蠢的错误,解决方案不需要我编辑 Windows 主机文件
    • 所有常用操作系统都有一个hosts 文件,无论操作系统如何,它都使用相同的语法。在 Unix 系列系统(Linux、OSX 等)上,它是 /etc/hosts。
    • 问题在于backbone.js,它是一个客户端javascript库,你知道backbone.js
    • 我只是假设您使用的是 Windows,每个操作系统都有一个主机文件。使用此文件,您可以仅为您的计算机伪造一个域名。例如,shelfari.dev。当您使用它时,您的开发环境将看起来更接近您的最终网络服务器,可能是shelfari.com(或其他东西)。所以你在实现网站时不需要改变路径。
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2020-08-29
    • 2023-03-29
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多