Определение относительного пути с помощью jQuery
У меня есть несколько сайтов 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
Ответы
Ответ 1
Избавьтесь от ведущего "/" в URL-адресе. Ведущая косая черта означает "от корня сайта", а не "от текущей папки".
Изменить: Хорошо, тогда в корневом индексе каждого "сайта" вам нужно определить BASE HREF, чтобы включить это имя папки. Тогда ведущая косая черта должна учитывать это значение вместо корня сайта.
Ответ 2
Лучше всего было бы проверить местоположение, например:
var pathname = window.location.pathname;
И затем выполните некоторые indexOf(), чтобы указать, к какой WP-установке нужно указать.
Ответ 3
Это потому, что вы начали свой URL с /
, что делает его абсолютным URL-адресом. Чтобы сделать его относительным URL, измените его на url: "wp-content/themes/mytheme/data.xml",
.
Ответ 4
Я не тестировал его, но что-то вроде этой работы?
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
});
Ответ 5
Самое простое решение:
url: window.location.pathname + "/wp-content/themes/mytheme/data.xml",
Ответ 6
Возможно, вы могли бы определить глобальную переменную (я думаю, это оправдано в этом случае), определяя корневой каталог:
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
});
Ответ 7
Имейте в виду, что имя window.location.pathname связано с вашей структурой каталогов. Я признаю, что много дел это работает, но не всегда!
Просто записал это, потому что, возможно, кто-то здесь оказался с MVC в своем уме.
Ответ 8
Если ваш код JavaScript написан в файле php, используйте
url: "<?php echo site_url(); ?>/wp-content/themes/mytheme/data.xml",
Если вы вызываете AJAX-запрос onclick из php файла, используйте его в onclick
onclick="cat_ajax_get('some_value', '<?php echo site_url(); ?>');"
function cat_ajax_get(catID, ajaxurl) {
jQuery.ajax({
type: "GET",
url: ajaxurl + "/wp-content/themes/mytheme/data.xml",
dataType: "xml",
success: parseDataXML
});
}
Ответ 9
Я думаю, что он спрашивает, есть ли что-то вроде ms mvc Url.Content, которое позволит вам использовать ~/для перехода к поддомену. Я не думаю, что в jquery есть что-то подобное, или, по крайней мере, я не сталкивался с этим. Возможно, вам придется жестко закодировать субдомен в URL.
Ответ 10
Вы можете просто использовать ".." перед именем папки:
url: "../wp-content/themes/mytheme/data.xml"
Я надеюсь, что он работает в wp. Обычно это работает для других случаев.