【问题标题】:Javascript calls relative paths and not from web rootJavascript 调用相对路径,而不是来自网络根目录
【发布时间】:2013-06-05 19:14:12
【问题描述】:

当我从示例 Ajax 或其他函数调用 javascript 中的文件时,javascript 会尝试相对于当前地址调用它,而不是从 baseURL 或根。

例如,如果我在 domain.com/my-page/ 上并尝试使用调用 php 文件

$.post('ajax/class.designer.php', { action: 'getcard', cardID: id },
        function(data) {
            loadCard(data)
        }, "json");

它尝试调用 domain.com/my-page/ajax/class.designer.php,而我实际上希望它调用 domain.com/ajax/class.designer.php。

CKEditor 等插件也一样,会尝试调用相对于当前地址的 .css 文件。

应用程序正在使用 mod_rewrite 和友好的 url。一切都被重定向到位于 / 中的 index.php,然后我从 index.php 调用函数来显示页面。

我已经设置了 RewriteBase / 并且我还在我的 HTML 头中设置了 baseurl 到根路径。

注意:当我在本地主机上运行它时,一切正常。当我将它移到我的实时服务器时,问题就开始了。

【问题讨论】:

  • 放一个前导斜线/ajax/class.designer.php

标签: javascript jquery .htaccess mod-rewrite


【解决方案1】:

在 ajax 前面加上一个斜线,即/ajax。当您离开斜线时,您将获得相对路径,即相对于您所在位置的路径。要获得绝对路径,请始终以 / 开头。

【讨论】:

  • 是的,我当然可以在我的电话前面加上 /。但正如我所说,这也会弄乱我在插件中的调用,例如试图从 / 调用的 CKEditor。因此,我正在寻找使所有 javascript 从我的根页面运行的方法。它在本地主机上运行良好,甚至在子页面上也能正常工作,所以从那以后肯定有什么不同或“错误”?
  • @MarcusLind 那么我不太确定你的问题是什么。这个电话怎么会弄乱别的东西?您将需要发布更多代码或更明确地解释在这种情况下使用绝对路径的影响。
  • @MarcusLind:听起来您在使用 CKEditor 时遇到了单独的问题。也许将其作为一个单独的问题发布。
【解决方案2】:

上述答案的替代方法是您可以在头部添加一个基本标签。这将告诉浏览器从哪里开始所有相对路径。对于您的特定问题,您将添加:

<base href="http://domain.com">

这将导致您添加的任何相对 URL 从根目录开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2011-12-19
    • 2017-03-24
    • 2017-05-17
    • 2012-08-18
    • 2019-03-08
    相关资源
    最近更新 更多