Подтвердить что ты не робот

Определение относительного пути с помощью 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
4b9b3361

Ответ 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. Обычно это работает для других случаев.