[RESOLU] Problème rewriting avec Ajax

Petit nouveau ! | 9 Messages

24 sept. 2012, 11:37

Bonjour,
J'ai mis en place le rewriting sur un site, mais j'ai un petit problème sur une page qui fait appel à de l'ajax

appel de la page: $.getJSON("calendrier/ajax_calendrier.php",{numcateg: numcateg, ajax: 'true'}, function(j){ ...

dans le fichier .htaccess j'ai mis une règle :
RewriteRule ^ajax_calendrier/([0-9]+)$ ajax_calendrier.php?numcateg=$1 [NC]

Mais la console me renvoi l'erreur : GET calendrier/ajax_calendrier.php?numcateg=10&ajax=true
404 Not Found

Merci d'avance pour votre aide

ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2012, 14:56

Cette règle n'impacte pas ta requête, le motif ne lui correspond pas. ;)
Donc c'est véritablement que le fichier n'existe pas à cet endroit ou bien que tu as une autre règle qui est appliquée.

Petit nouveau ! | 9 Messages

24 sept. 2012, 15:45

l'emplacement du ficher existe bien puisque sans le rewriting ma page s'actualise correctement.

voici la liste des règles existantes :
RewriteEngine On
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z_]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z_]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Précision, j'utilise joomla et j'ai intégrer une page php à un article qui doit s'actualiser avec un script ajax.
(sans le rewriting tout marche correctement).

Petit nouveau ! | 9 Messages

25 sept. 2012, 10:12

j'ai modifier l'url de la page par :
$.getJSON("calendrier/25",{numcateg: numcateg, ajax: 'true'}, function(j){
alert("JSON Data: " + j[0].element);
})

cette fois la console ne me renvoi plus d'erreur : GET calendrier/25?numcateg=9&ajax=true 200 OK 186ms

cependant rien s'affiche.

si j'exécute la requête dans mon navigateur elle me renvoie bien des données valide :
[{"numcateg":"9","numelement":"28","inter":"0","icone":"internet.png","categ":"Internet","element":"Internet","m1":"","m2":"","m3":"7","m4":"10 ou 18","m5":"","m6":"20","m7":"","m8":"","m9":"","m10":"24","m11":"","m12":"19"}]

où est mon erreur ? merci

ViPHP
xTG
ViPHP | 7331 Messages

25 sept. 2012, 13:26

Le retour n'est pas valide non.
Tu retournes non pas du JSON mais un array contenant dans l'index 0 une chaîne JSON (cf les chevrons [] ).

Petit nouveau ! | 9 Messages

25 sept. 2012, 14:53

merci, j'ai modifié, mais cela ne change rien (et je rappelle que tout fonctionne sans l'activation du rewriting)

{"numcateg":"9","numelement":"28","inter":"0","icone":"internet.png","categ":"Internet","element":"Internet","m1":"","m2":"","m3":"7","m4":"10 ou 18","m5":"","m6":"20","m7":"","m8":"","m9":"","m10":"24","m11":"","m12":"19"}

ViPHP
xTG
ViPHP | 7331 Messages

25 sept. 2012, 14:57

Que donnes un alert(j) ?
As-tu regardé la console d'erreur ?

Petit nouveau ! | 9 Messages

25 sept. 2012, 15:49

console : GET planning/25?numcateg=9&ajax=true 200 OK 186ms

mais rien n’apparaît même pas le message !

ViPHP
xTG
ViPHP | 7331 Messages

25 sept. 2012, 16:46

Et en accédant à planning/25?numcateg=9&ajax=true tu as bien la chaîne que tu annonces plus haut ? O_o
Car la requête Ajax n'est rien d'autre qu'un onglet ouvert que tu ne vois pas, cela revient strictement au même.

Petit nouveau ! | 9 Messages

25 sept. 2012, 17:03

oui il me renvoi bien la chaîne avec l'adresse planning/25?numcateg=9&ajax=true

il faut cependant qu'il me renvoi un tableau sinon cela ne marche même pas sans le rewriting :[{"numca .....":"19"}]

ViPHP
xTG
ViPHP | 7331 Messages

26 sept. 2012, 08:54

Alors la requête Ajax doit te renvoyer exactement la même chose dans ce cas, vu qu'elle fait exactement la même chose comme je l'ai expliqué plus haut.
Un oeil dans une extension telle que Firebug pour visionner le retour de la requête Ajax devrait t'afficher la chaîne JSON.
Et un alert ou console.log de la variable j aussi.

Petit nouveau ! | 9 Messages

26 sept. 2012, 09:28

La requête ajax dans ce cas là me renvoi en réponse les données sous forme d'une page html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr" lang="fr-fr" >
<head>
<base href="http://.../planning/25" />
...
<div class="art-article">
[{"numcateg":"9","numelement":"28","inter":"0","icone":"internet.png","categ":"Internet","element":"Internet","m1":"","m2":"","m3":"7","m4":"10 ou 18","m5":"","m6":"20","m7":"","m8":"","m9":"","m10":"24","m11":"","m12":"19"}]
</div>
...

Comment faire pour que la requête ne renvoie que le tableau de données ? faut-il modifier le .htaccess ?

ViPHP
xTG
ViPHP | 7331 Messages

26 sept. 2012, 10:37

Quand tu accèdes à la page via l'url, regardes le code source retourné par le navigateur.
Tu devrais voir la même chose.

Autrement dit c'est ton script PHP qui te retourne cela.
Ton rewriting doit évincer des paramètres (je parie sur le ajax=true).

Petit nouveau ! | 9 Messages

26 sept. 2012, 11:02

je ne sais pas comment l’écrire dans le htaccess, j'ai essayé une règle mais cela ne marche pas :

RewriteCond %{QUERY_STRING} ajax=true
RewriteRule (.+) planning/25?numcateg=$1 [L]

Petit nouveau ! | 9 Messages

26 sept. 2012, 14:18

résolu :
en mettant le chemin en absolu çà marche ! :D
merci xTG pour ton aide