Javascript 用jQuery确定相对路径

Javascript 用jQuery确定相对路径,javascript,jquery,ajax,Javascript,Jquery,Ajax,我在顶级域下的子文件夹中安装了几个wordpress站点: 我需要在它们中的每一个中加载一个AJAX文件,我使用了以下代码: // Initiate asynchronous load of xml data: jQuery.ajax({ type: "GET", url: "/wp-content/themes/mytheme/data.xml", dataType: "xml", success: parseDataXML }); 但最终会在域的根路径中

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

  • 我需要在它们中的每一个中加载一个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
    
    而不是站点的根路径:

    http://www.mydomain.com/wp-content/themes/mytheme/data.xml
    
    http://www.mydomain.com/site-a/wp-content/themes/mytheme/data.xml
    
    去掉url路径中的前导“/”。前导斜杠的意思是“从网站的根目录”,而不是“从我当前的文件夹”


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

    这是因为您以
    /
    开头的url使其成为绝对url。要使其成为相对url,请将其更改为
    url:“wp content/themes/mytheme/data.xml”,

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

    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
    });
    

    我的最佳选择是检查位置,如:

    var pathname = window.location.pathname;
    

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

    我还没有测试过它,但是否需要这样做

    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
    });
    

    请注意,window.location.pathname与目录结构有关。我承认很多情况下这是有效的,但并不总是有效的

    只是把它写下来,因为也许有人在她/他的脑海中出现了MVC

    只需在文件夹名称前使用“..”:

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

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

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

    url: "<?php echo site_url(); ?>/wp-content/themes/mytheme/data.xml",
    
    最简单的解决方案:

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

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

    去掉url路径中的前导“/”。前导斜杠的意思是“从网站的根目录”,而不是“从我当前的文件夹”。如果它是从子页面加载的,那么它将不起作用-例如,意味着它将指向如果你可以执行一些服务器脚本,你可以抓取当前网站并将其前置到你的url路径。它加载的url应该是相对于它运行的.js文件的,不是你正在使用它的页面,除非您出于某种原因从内联
    标记运行。如果从子页面加载,则该标记不起作用-例如,mydomain.com/site-a/page意味着它将指向mydomain.com/site-a/page/wp-content/themes/mytheme/data。xml@iKnowKingFoo-你能澄清一下你的编辑吗?我在哪里定义BASE HREF?@iKnowKingFoo-问题是这不是不同于硬编码URL@Yarinlocalhost/A/B/C/如果您的ajax页面在B中,PHP文件在C中,那么您应该将url:“/A/B/C/file.PHP”因为localhost是基本HREF。如果从子页面加载,则该HREF不起作用-例如,mydomain.com/site-a/page意味着它将指向mydomain.com/site-a/page/wp-content/themes/mytheme/data.xml。加载的URL应与运行它的.js文件相关,如果您在其中一个PHP页面的内联
    标记中使用它,您可以使用Wordpress“
    home\u url()
    函数:
    url:“/wp content/themes/mytheme/data.xml”,
    这并不能回答问题。一旦你有足够的钱,你将能够;相反