Определение относительного пути с помощью jQuery - PullRequest
27 голосов
/ 08 июня 2011

У меня есть несколько 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

Ответы [ 10 ]

32 голосов
/ 08 июня 2011

Избавьтесь от ведущего "/" в пути URL.Начальная косая черта означает «из корня сайта», а не «из моей текущей папки».

Редактировать: Хорошо, тогда в корневом индексе каждого «сайта» необходимо определить BASE HREF, чтобы включитьэто имя папки.Тогда ведущая косая черта должна учитывать это значение вместо корня сайта.

11 голосов
/ 08 июня 2011

Лучшей моей ставкой будет проверка местоположения, например:

var pathname = window.location.pathname;

А затем выполните indexOf (), чтобы указать, на какую установку WP указывать.

3 голосов
/ 08 июня 2011

Я не проверял это, но будет ли что-то вроде этой работы?

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
});
3 голосов
/ 08 июня 2011

Это потому, что вы начали свой URL с /, что делает его абсолютным. Чтобы сделать его относительным, измените его на url: "wp-content/themes/mytheme/data.xml",.

2 голосов
/ 03 марта 2017

Самое простое решение:

url: window.location.pathname + "/wp-content/themes/mytheme/data.xml",
0 голосов
/ 16 марта 2019

Я думаю, что он спрашивает, есть ли что-то вроде ms mvc Url.Content, которое позволит вам использовать ~ / для перехода к поддомену.Я не думаю, что в jquery есть что-то подобное, или, по крайней мере, я не сталкивался с этим.Возможно, вам придется жестко закодировать субдомен в URL.

0 голосов
/ 24 октября 2014

Если ваш код javascript написан в php-файле, используйте

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

Если вы вызываете AJAX-запрос по клику из php-файла, используйте его в 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
});

}
0 голосов
/ 12 марта 2014

Вы можете просто использовать '..' перед именем папки:

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

Я надеюсь, что это работает в WP. Обычно это работает для других случаев.

0 голосов
/ 01 августа 2013

Имейте в виду, что имя window.location.pathname относится к вашей структуре каталогов.Я признаю, что во многих случаях это работа, но не всегда!
Просто записал это, потому что, может быть, кто-то оказался здесь с MVC в своем уме.

0 голосов
/ 08 июня 2011

Возможно, вы могли бы определить глобальную переменную (я думаю, что в этом случае это оправдано), определяющую корневой каталог:

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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...