11548 sujets

JavaScript, DOM et API Web HTML5

Bonsoir,

J'ai un problème avec Ajax, auquel je viens de me mettre. Mon but est de charger un bout de page, sans charger toute la page. Cela fonctionne bien, sauf si je me mets à utiliser une page ajax.php pour traiter la requête Ajax :

<a href="philosophie/kant.php" onclick="charger_page(this.href); return false;">Kant</a>


Et dans Ajax.php, si je fais ceci, tout fonctionne bien :
xmlhttp.open("GET", lien, true);

(lien = paramètre de charger_page).

Mais si je fais ceci :
xmlhttp.open("GET", 'ajax.php?p=' + lien, true);


Là ça ne fonctionne plus, sachant que dans ajax.php je vérifie $_GET['p'] avec un file_exists().

Il semblerait que la variable JS lien ne vale pas "philosophie/kant.php", comme je le voudrais, mais "http://www.site.com/philosophie/kant.php" : elle transforme le lien en lien absolu.

Mis à part les problèmes de sécurité en PHP que je pourrais rencontrer avec cette méthode (ne vous inquiétez pas, j'en ai conscience, j'ai simplifié le code pour expliquer le problème), pourriez-vous me dire comment faire pour que lien vale la valeur de l'attribut "href", et pas autre chose ? En ne touchant pas au PHP ?

Merci d'avance.
Modifié par Oracle (23 Nov 2009 - 18:09)
Je ne pense pas que tu pourras faire grand chose. A mon avis, ce genre de remplacement est fait automatiquement par le navigateur et tu ne peux rien y faire (d'ailleurs, ça doit dépendre un peu d'un navigateur à l'autre). J'avais déjà observé ce genre de choses avec les src des images.
Hello,

L'attribut href est en effet une valeur normalisée de l'attribut HTML (ce qui est en général très utile). Il faut utiliser
this.getAttribute("href")
pour obtenir la valeur brute.

Mais cela ne marchera pas sous certains navigateurs (notamment IE) : http://www.quirksmode.org/bugreports/archives/2005/02/getAttributeHREF_is_always_absolute.html

Une solution simple est d'utiliser jQuery :
$(this).attr("href")

Sinon, il faut bidouiller avec le deuxième paramètre non standard de getAttribute (en essayant de ne pas pénaliser les navigateurs qui suivent le standard dans ce cas).
Modifié par Julien Royer (20 Nov 2009 - 14:05)