使用jQuery确定相对路径

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

  1. http://www.mydomain.com/site-a/
  2. http://www.mydomain.com/site-b/

我需要在每个文件中加载一个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 

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

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

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

 var pathname = window.location.pathname; 

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

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

我还没有测试过,但这样的工作会不会这样?

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

最简单的解决方案

 url: window.location.pathname + "/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 }); 

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

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

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

如果从php文件调用AJAX请求onclick,则在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 }); } 

你可以在de文件夹名称之前使用’..’:

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

我希望它在wp中有效。 它通常适用于其他情况。