JeuWeb - Crée ton jeu par navigateur
[Résolu] Problème avec xAJAX - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Problème avec xAJAX (/showthread.php?tid=2587)



[Résolu] Problème avec xAJAX - Arathor - 21-05-2008




RE: Problème avec xAJAX - barst - 21-05-2008

Déjà tu peux changer le retour de ta fonction :
Code PHP :
<?php 
return $reponse->getXML();
en
Code PHP :
<?php 
return $reponse;

XAJAX attends que ta fonction retourne un objet et non le XML que l'objet contient.


Ensuite dans les paramètres de retour, j'ai un doute sur "event"


RE: Problème avec xAJAX - Arathor - 23-05-2008

Ce fichu problème commence vraiment à me les ...... [Image: 241re.gif]

Apparemment, la fonction return $reponse->getXML(); s'utilise pour la version 0.5 de ajax, alors que j'utilisais la 0.2.4 (finalement, je suis passé à la 0.5 dans l'espoir de régler le problème mais ça n'a pas marcher.)
Enfin bref, le problème ne vient pas de retrun, ni de event (j'ai pu vérifier qu'elle faisait partie des variables qui sont bien transmises).

Par contre, j'ai utiliser la fonction debug afin de chercher la source du problème, et j'obtiens ceci en particulier :

ERROR: No response processor is available to process the response from the server.
Content-Type: text/html.
Check for error messages from the server.


Si j'ai bien compris (avec mon niveau exceptionnel en anglais :goodSmile le processeur ne parvient pas à "capter" la réponse du serveur >.<
Je ne comprend de quoi sa peut venir...


RE: Problème avec xAJAX - Sephi-Chan - 23-05-2008

Ne connaissant pas assez xAjax pour te répondre, je me permettrais juste de te déconseiller cette librairie PHP au profit d'une librairie Javascript telle que jQuery.
Rien que le slogan de xAjax sent le moisi à plusieurs centaines de mètres : Ajax est une façon d'utiliser Javascript, PHP n'a rien à voir là dedans.

Le code source n'en sera que plus clair et propre, et ta sourcouche Javascript serait ainsi totalement délocalisée de la partie fonctionnelle de l'application.


Sephi-Chan, Mais c'est juste un conseil Wink


RE: Problème avec xAJAX - Mik - 24-05-2008

Je suis du même avis que Sephi, Xjax est bien compliqué et très mal documenté. (xajax.fr)

J'ai essayer de faire un systeme pour calculer le prix final de mes ressources en fonction des cases x et y, ben :mauvais::mauvais:


RE: Problème avec xAJAX - Raoull - 24-05-2008

Tu n'as pas mis dans ton code la partie javascript, le lien ou le bouton qui appelle la fonction Deplacement( ... ) dans ta page html, et qui lui passe les fameuses variables $bat et $orientation justement.

Mais ya un truc que je capte pas : dans ta page html tu appelle la fonction JS deplacement() qui appelle la fonction ajax Batiments() qui rappelle à son tour, via addScript, la fonction JS Deplacement() ... C'est une boucle infinie ça non ?

Sinon pour appeller une fonction JS présente dans ta page html (je pense à deplacement() donc) il y a addScriptCall() qui est bcp mieux pour ça.

Et c'est bien : return $reponse->getXML();

J'utilise xajax (avec parcimonie hein) sans problème jusqu'ici, ça n'a rien de compliqué une fois qu'on a mis le pied à l'étrier, par contre j'ai testé la 0.5 (qui n'est qu'en beta) je suis vite revenu à la 0.2x ...

la doc FR est là : http://xajaxproject.org/wiki/Fr:Main_Page
et la liste des fonctions (pas traduite...) ici


RE: Problème avec xAJAX - Arathor - 24-05-2008

Génial Raoull ! La fonction addScriptCall() marche parfaitement bien !

En fait, pour répondre à ta question, ma page affiche la map du joueur (sa colonie) sur laquelle il peut placer des bâtiments dynamiquement, un peut comme dans n'importe quel jeu de stratégie (c'est la qu'intervient ma fonction javascript), et au moment ou joueur clique pour placer son bâtiment, je renvoi vers ma fonction PHP qui va modifier le fichier carte. Mais si le joueur doit placer plusieurs bâtiments de suite, j'ai penser que ce serait plus agréable que le bâtiment reste sélectionner plutôt que de devoir retourner le chercher dans le menu (afin que l'utilisateur n'ai de nouveau qu'a cliquer pour placer le bâtiment). Donc finalement, ce n'est pas une boucle infini, puisque la fonction PHP n'est appeler que si le
joueur place un bâtiment, et la fonction javascript n'est appelé que lorsque le joueur sélectionne un bâtiment (dans le menu de construction). Je précise que la fonction javascript s'arrête dès que l'on clique en dehors du bloc qui contient la map.

En fait, j'ai de nouveau un petit souci dans ma fonction PHP.
Comme je l'ai dit, la map est stocké dans un fichier texte, de la forme :

0 0 0 0 0 0 0b 2 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 0c 0

ou chaque numéro correspond à un terrain ou un bâtiment. Mes bâtiments peuvent prendre plusieurs case, par exemple une maison (numéro 10), on aurait :

0 0 0 0 0 0 0 2 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 10 10a 1 1 1 1 1 1 1 1 0 0
0 0 0 0 1 1 1 1 1 1 1 1 2 1 2 2 2 2 2 2 1 1 1 1 10 10 1 1 1 1 2 2 2 2 1 0

Le 10a correspond à la case de référence, à partie de laquelle je créer un div qui passer au dessus des autres cases de ma map... enfin bref, ce n'est pas très important ici.
Bref, j'ai un array qui contient chaque ligne du tableau : $_SESSION['ligne_creation'] (donc si je tape $_SESSION['ligne_creation'][5], sa m'affiche la ligne numero 5, par exemple)
Ma fonction PHP donc, doit me permettre de modifier mon fichier carte : (j'espère que j'ai été asser clair...)

Code PHP :
<?php 
//TRAITEMENT DU BATIMENT
function Batiments($coordx_batiment, $coordy_batiment, $coordx_batiment_max, $coordy_batiment_max, $nom, $orientation, $bat, $dim_x, $dim_y, $depassement_x, $depassement_y)
{
$reponse = new xajaxResponse();//Initialisation de l'objet xAJAX
$reponse->setCharEncoding('ISO-8859-1');


$posx = $_SESSION['posx'] - 22 + $coordx_batiment;//calcul des coordonnees du batiment
$posy = $_SESSION['posy'] - 6 + $coordy_batiment;
$posx_max = $_SESSION['posx'] - 22 + $coordx_batiment_max;//calcul des limites du batiment
$posy_max = $_SESSION['posy'] - 6 + $coordy_batiment_max;

for (
$compteur_y = $posy; $compteur_y <= $posy_max; $compteur_y ++)//Boucle Y
{
for (
$compteur_x = $posx; $compteur_x <= $posx_max; $compteur_x ++)//Boucle X
{
if(
$compteur_y == $posy AND $compteur_x == $posx_max)//Pour la case de référence
{
$batiment = $nom . $orientation;
}
else
//Sinon, le nom normal
{
$batiment = $nom;
}
//C'est ici que sa ce complique, en fait preg_match est censé sélectionné le début de la ligne en modification, car preg_replace ,qui doit modifier juste un endroit de la ligne, supprime aussi tout ce qui précède...
$compteur_x2 = $compteur_x - 1;
preg_match('#([0-9][a-z0-9]* ){' . $compteur_x2 . '}#' ,$_SESSION['ligne_creation'][$compteur_y], $debut_ligne);
//preg_replace donc...
$fin_ligne = preg_replace('#([0-9][a-z0-9]* ){' . $compteur_x . '}#', $batiment . ' ', $_SESSION['ligne_creation'][$compteur_y], 1);
//Je reconstitue la chaine
$_SESSION['ligne_creation'][$compteur_y] = $debut_ligne[0] . $fin_ligne;
}
}
//Maintenant on enregistre tout ça dans le fichier
$Fnm = 'joueurs/colonies/' . $_SESSION['pseudo'] . '2.txt';//on ouvre le fichier
$inF = fopen($Fnm,"w+");

$carte = implode(" ", $_SESSION['ligne_creation']);//on remplace le fichier
fputs($inF, $carte);
//Et on rapelle la fonction
$reponse->addScriptCall("Deplacement", "$bat", "event", "$dim_x", "$dim_y", "$depassement_x", "$depassement_y", "$nom", "$orientation");
return
$reponse->getXML();
}
//FIN

Le problème dans ce code, c'est que les variables $debut_ligne et $fin_ligne semblent ne rien contenir, alors que ce script marchait très bien avant, je ne vois pas ce que j'ai pu modifier qui foire mon script...
Voili voilou, je sais que ce n'est pas ce qu'il y à de plus simple, donc si vous avez des idées pour améliorer aussi, je suis preneur Smile


RE: Problème avec xAJAX - Raoull - 25-05-2008

Tant mieux si ça va mieux.

Par contre si ton nouveau blem vient des fonctions preg_* je ne peux rien pour toi (je fuis les expressions rationnelles).
Un autre saura mieux que moi...

Tout ce que je peux te conseiller, si c'est pas déjà fait, c'est de debug les vars que tu utilises dans ces fontctions preg_* voir déjà si ce qu'elles contiennent est juste.

Bon courage.

PS : un ptit fclose() quand tu as fini d'écrire dans ton fichier Wink


[RESOLU] Problème avec xAJAX - Arathor - 26-05-2008

Probleme résolu !
En fait il s'agissait juste de session_start() qui n'était pas au bon endroit, du coup mes variables session dans ma fonction php étaient vide car celle-ci était placée avant.