使用jQuery确定相对路径

时间:2011-06-08 17:44:58

标签: javascript jquery ajax

我在顶级域名下的子文件夹中安装了几个wordpress网站:

  1. http://www.mydomain.com/site-a/
  2. http://www.mydomain.com/site-b/
  3. 我需要在每个文件中加载一个AJAX文件,并且我使用了以下代码:

    // Initiate asynchronous load of xml data:
    jQuery.ajax({
        type: "GET",
        url: "/wp-content/themes/mytheme/data.xml",
        dataType: "xml",
        success: parseDataXML
    });
    

    但最终会在域的根路径中搜索文件:

    http://www.mydomain.com/wp-content/themes/mytheme/data.xml
    

    而不是网站的根路径:

    http://www.mydomain.com/site-a/wp-content/themes/mytheme/data.xml
    

10 个答案:

答案 0 :(得分:32)

删除网址路径中的前导“/”。前导斜杠表示“从站点的根目录”,而不是“从我当前的文件夹”。

编辑:好的,然后在每个“网站”的根索引中,您需要定义BASE HREF以包含该文件夹名称。然后,前导斜杠应该考虑该值而不是站点根。

答案 1 :(得分:11)

我最好的选择是查看位置,例如:

var pathname = window.location.pathname;

然后执行一些indexOf()来指定要指向的WP安装。

答案 2 :(得分:3)

这是因为您使用/启动了您的网址,使其成为绝对网址。要使其成为相对网址,请将其更改为url: "wp-content/themes/mytheme/data.xml",

答案 3 :(得分:3)

我没有对它进行过测试,但是这样会有用吗?

var baseUrl = "http://www.mydomain.com",
    pathToDataXml = "/wp-content/themes/mytheme/data.xml",
    siteDir = window.location.href.toString()
              .replace(baseUrl, "")
              .replace(pathToDataXml, "");

// Initiate asynchronous load of xml data:
jQuery.ajax({
    type: "GET",
    url: baseUrl + siteDir + pathToDataXml,
    dataType: "xml",
    success: parseDataXML
});

答案 4 :(得分:2)

最简单的解决方案:

url: window.location.pathname + "/wp-content/themes/mytheme/data.xml",

答案 5 :(得分:0)

也许你可以定义一个全局变量(我认为在这种情况下这是合理的)定义根目录:

rootFolder = location.pathname.substr(0, 7) === '/site-a' ? '/site-a/' : '/site-b/';

然后您可以将此变量用于您的AJAX请求:

jQuery.ajax({
    type: "GET",
    url: rootFolder + "wp-content/themes/mytheme/data.xml",
    dataType: "xml",
    success: parseDataXML
});

答案 6 :(得分:0)

请注意window.location.pathname注意到您的目录结构。我承认很多情况都有效,但并非总是如此! 刚刚写下来,因为也许有人在她/他的脑海中结束了MVC。

答案 7 :(得分:0)

如果您的javascript代码是在php文件中编写的,请使用

url:“/ wp-content/themes/mytheme/data.xml”,

如果从php文件调用AJAX请求,请在onclick中使用它

onclick =“cat_ajax_get('some_value','');”

function cat_ajax_get(catID, ajaxurl) { 

 jQuery.ajax({
 type: "GET", 
 url: ajaxurl + "/wp-content/themes/mytheme/data.xml",
 dataType: "xml",
 success: parseDataXML
});

}

答案 8 :(得分:-1)

我想他要问的是是否存在ms mvc Url.Content之类的东西,它使您可以使用〜/导航到子域。我认为jquery中没有类似的东西,或者至少我还没有遇到过。您可能需要将子域硬编码到url中。

答案 9 :(得分:-3)

你可以简单地使用' ..'在de folder name之前:

url: "../wp-content/themes/mytheme/data.xml"

我希望它能在wp中运行。它通常适用于其他情况。