it-swarm.com.ru

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

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

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

32
Adrian J. Moreno

Моя лучшая ставка была бы проверить местоположение, как:

var pathname = window.location.pathname;

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

10
ecchymose

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

3
Useless Code

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

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
});
2
Code Maverick

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

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

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

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

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

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

Если вы вызываете AJAX запрос onclick из 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
Atif Tariq

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

0
Péter