web-dev-qa-db-fra.com

Détermination du chemin relatif avec jQuery

J'ai plusieurs sites wordpress installés dans des sous-dossiers sous un domaine de premier niveau:

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

Je dois charger un fichier AJAX dans chacun d'eux et j'ai utilisé le code suivant:

// Initiate asynchronous load of xml data:
jQuery.ajax({
    type: "GET",
    url: "/wp-content/themes/mytheme/data.xml",
    dataType: "xml",
    success: parseDataXML
});

mais cela finit par chercher le fichier dans le chemin racine du domaine:

http://www.mydomain.com/wp-content/themes/mytheme/data.xml

Au lieu du chemin racine du site:

http://www.mydomain.com/site-a/wp-content/themes/mytheme/data.xml
26
Yarin

Débarrassez-vous du "/" dans le chemin de l'URL. La barre oblique signifie "de la racine du site", pas "de mon dossier actuel".

Edit: Ok, puis dans l'index racine de chaque "site", vous devez définir BASE HREF pour inclure ce nom de dossier. Ensuite, la barre oblique principale doit prendre en compte cette valeur au lieu de la racine du site.

32
Adrian J. Moreno

Mon meilleur pari serait de vérifier l'emplacement, comme:

var pathname = window.location.pathname;

Et ensuite, indexOf () pour spécifier l’installation WP à laquelle pointer.

10
ecchymose

C'est parce que vous avez commencé votre URL avec / qui en fait une URL absolue. Pour en faire une URL relative, remplacez-la par url: "wp-content/themes/mytheme/data.xml",.

3
Useless Code

Je ne l'ai pas testé, mais cela pourrait-il fonctionner?

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

La solution la plus simple:

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

Vous pourriez peut-être définir une variable globale (je pense que cela est justifié dans ce cas) définissant le répertoire racine:

rootFolder = location.pathname.substr(0, 7) === '/site-a' ? '/site-a/' : '/site-b/';

Vous pouvez ensuite utiliser cette variable pour votre demande AJAX:

jQuery.ajax({
    type: "GET",
    url: rootFolder + "wp-content/themes/mytheme/data.xml",
    dataType: "xml",
    success: parseDataXML
});
0
lonesomeday

Si votre code javascript est écrit dans un fichier php, utilisez

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

Si vous appelez la demande AJAX onclick depuis un fichier php, utilisez-la dans

onclick = "cat_ajax_get ('une_valeur', '');"

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

Sachez que window.location.pathname ne correspond pas à votre structure de répertoires. J'avoue que beaucoup de cas c'est du travail, mais pas toujours!
Je viens de l'écrire parce que peut-être quelqu'un a fini ici avec MVC dans sa tête. 

0
Péter