【问题标题】:JavaScript relative AJAX call pathJavaScript 相对 AJAX 调用路径
【发布时间】:2026-02-18 07:40:01
【问题描述】:

我有一个包含 PHP 和 JavaScript 文件的脚本。 所有这些文件都在根文件夹/myfolder

假设我必须在我的网站上包含的脚本是 /myfolder/script.js ,问题是在 script.js 我有对 ../myfolder/ajax.php 的 ajax 调用,因为路径将相对于脚本所在的页面如果我在/a/b/page.php 页面上有类似的内容,则包含将不起作用:

<script src="../../myfolder/script.js><script> 因为这将从../myfolder/ajax.php 调用ajax 方法,如AJAX 调用中所述,在本例中为/a/myfolder/ajax.php

如何重写 AJAX 调用 URL,使其始终指向正确的文件,无论 script.js 包含在何处?

ROOT
|---myfolder
    |--script.js
    |--ajax.php
|--page1.php
|--subfolder
   |--page2.php
   |--subfolder
      |--page3.php

【问题讨论】:

  • 你为什么不直接打电话给ajax.php
  • 这将调用/a/b/ajax.php,这不是正确的路径。
  • 您能否提供您的文件夹/文件结构的简单图形表示?试图以文本形式理解这一点让我头疼。
  • @MCL,当然,这也让我感到困惑。
  • 完成。如果 script.js 包含在任何 page.php 中,这应该可以工作。

标签: javascript relative-path include-path


【解决方案1】:
/**
 * returns the current context path,
 * ex: http://localhost:8080/MyApp/Controller returns /MyApp/
 * ex: http://localhost:8080/MyApp returns /MyApp/
 * ex: https://www.example.co.za/ returns /
 */
function getContextPath() {
    var ctx = window.location.pathname,
        path = '/' !== ctx ? ctx.substring(0, ctx.indexOf('/', 1) + 1) : ctx;
    return path + (/\/$/.test(path) ? '' : '/');
}

在像http://www.example.com/ajax这样的网址上:

getContextPath() + 'myfolder/ajax.php'

将返回/ajax/myfolder/ajax.php


类似地在像http://www.example.com/这样的网址上:

getContextPath() + 'myfolder/ajax.php'

将返回/myfolder/ajax.php


最后在http://www.example.com/myfolder/a/b/c/d/e/f/g/这样的网址上:

getContextPath() + 'myfolder/ajax.php'

将返回/myfolder/ajax.php

【讨论】:

  • 是的,但我需要它返回 ../myfolder/ajax.php 。因此,在每种情况下,脚本都必须返回到位于根文件夹中的/myfolder 的相对路径。如果当前页面 URL 的深度为 3(有 3 个父文件夹),则应该对 ../../../myfolder.php 进行 AJAX 调用。
  • 它不需要是相对的,通过在你调用的url前面指定/;它从网址的根目录运行,因此如果您在 www.example.com 上并调用 /ajax/ajax.php,则将调用的 url 是 www.example.com/ajax/ajax.php
  • myfolder.php 永远不会改变位置,所以它总是有相同的 url,我们只是用函数建立绝对 url
  • 所以我可以简单地将 script.js 中的 AJAX 调用 url 替换为 /myfolder/ajax.php ?
  • 是的,如果您的网站始终在 root上下文中运行,如果您的应用位于/MyApp/,那么您需要该功能