AJAX TOOLKIT - PARTAGE DE CLASSES ENTRE PHP / JS

pj27 Messages postés 12 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 7 juillet 2008 - 20 juin 2008 à 20:08
barroidrissa Messages postés 3 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 4 novembre 2010 - 4 nov. 2010 à 00:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47075-ajax-toolkit-partage-de-classes-entre-php-js

barroidrissa Messages postés 3 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 4 novembre 2010
4 nov. 2010 à 00:13
Salut aKheNathOn,
d'abord ton code il est pure,facile a comprendre pour nous les debutants en ajax et facilement adaptable!!!
je mets 10/10 pour ne pas dire 11/10 si ça existait!!!
alors j'ai essayer d'enregistrer les produits saisis dans une base de données,la modification ainsi que la suppression,tout passe nikel.
mais quand j'essai de selectionner les produits dans la bdd pour les afficher avec la fonction refreshPannier() au demarage de la page,je n'obtient pas de resultat ou bien ce n'est pas possible!comme je l'ai dit je suis debutant en ajax!!
voici ce que j'ai fait:
function getProduits() {
if (isset($_SESSION['pannier'])) {
$req=mysql_query("select * from produit");
if($req!=false){
while($affiche=mysql_fetch_row($req)){
$_SESSION['pannier'][$ref]->ref=$affiche['ref'];
$_SESSION['pannier'][$ref]->titre=$affiche['titre'];
$_SESSION['pannier'][$ref]->pu=$affiche['pu'];
$_SESSION['pannier'][$ref]->qte=$affiche['qte'];
}
return $_SESSION['pannier'];
}
} else return array();
}

es-ce le bon emplacement ou ai-je fais des erreurs?
encore une fois de plus ton code est propre(10/10)!!!
merci pour ce toolkit bien codé!!a+
gigamaster Messages postés 13 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 15 juin 2009
15 déc. 2008 à 10:43
Merci, je m'en vais tester cette approche qui semble bien pratique ^^
Utilisateur anonyme
22 août 2008 à 16:34
lut stephane,

je te confirme comme quoi c'est OK. Ptite astuce pour éviter ce genre d'erreur :
Si votre fichier PHP est fait sous windows ou provient d'une base de données avec le charset par défaut, il faut effectivement rajoutter dans le Content-type le charset iso-8859-1 / si vous êtes sous linux ou sous une IDE qui vous enregistre les fichiers en UTF-8 faites la modif en conséquence.

Afin de gérer le charset dans tous les cas de figures il faudrait du code supplémentaire - tout upgrade sur le code est bien venu en MP.

bonne prog et a+,
akh
steph_dev_o Messages postés 7 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 18 novembre 2009
17 août 2008 à 20:08
Bonjour,

J'ai intégré les scripts dans un projet, et ça marche nickel donc j'en profite pour noter ...

Toutefois, j'ai eu un problème que je pense avoir résolu (car je suis totalement nouveau en ce qui concerne Ajax).
Ma page envoie la requête pour récupérer un nom. Ce nom contient des accents. Il est retourné avec des "?" qui remplacent ces accents ...
J'ai donc mis en place un envoi de header supplémentaire placé dans le code de Ajaxify.class.php au niveau des fonction : render_js() et render_response($value).

Voici ces fonctions :

function render_js() {
header('Content-type: application/x-javascript');
header('Content-type: text/html; charset=iso-8859-1'); /* <<<< nouveau code */
header("Cache-Control: no-cache");
....

et

function render_response($value) {
header('Content-type: text/html; charset=iso-8859-1'); /* <<<< nouveau code */
header("Cache-Control: no-cache");
echo 'var globalRet = ';
....

Comme je ne maitrise pas tout, pouvez vous me dire si c'est OK comme modif ...

Merci d'avance et encore merci pour ce toolkit bien pratique

Stéphane
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
25 juin 2008 à 20:56
Ca fonction nikel maintenant.
Encore merci pour ce super code. 10/10
Michel
Utilisateur anonyme
25 juin 2008 à 16:37
C'est ok sous IIS/Apache et compatible sous IE 6 et autres
Utilisateur anonyme
24 juin 2008 à 10:32
Ok, je monte un IIS avec PHP - en message privé tu peux me donner les versions de PHP, IIS et IE.
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
24 juin 2008 à 10:22
Je viens de faire la modification ça fonctionne maintenant dans Firefox sans problème et c'est super, mais avec IE il ne donne plus de message d'erreur http, mais une erreur javascript.
Exemple j'essaie le panier je tape des '1' dans les zones je clique 'ajout' et il me donne l'erreur javascript suivante:
Ligne:22 Car 4
Erreur:Cet objet ne gère pas cette propriété ou cette méthode
Code:0
URL:http://localhost/test/ajaxify/demo_panier.php
Utilisateur anonyme
24 juin 2008 à 10:09
Dans le fichier lib/js_template.php remplace la ligne 3 par celle-ci :
uri = 'http://<?php echo $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['SCRIPT_NAME'].'?js='.$_GET['js']; ?>';

Merci de confirmer si ça fonctionne.
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
24 juin 2008 à 06:53
Salut AkheNathOn,
Je viens d'éssayer le code sur une autre machine aussi avec IIS et là encore plus bizare il me dit que 'The page cannot be found' comme ci la page n'existait pas sur le serveur.
Alors que le fichier test.php que j'ai placé juste à côté fonctionne.

Voici le contenu de $_SERVER:
Array ( [ALLUSERSPROFILE] => C:\Documents and Settings\All Users [CLASSPATH] => .;C:\Program Files\Java\jre1.5.0_12\lib\ext\QTJava.zip [CommonProgramFiles] => C:\Program Files\Common Files [COMPUTERNAME] => MICHEL2 [ComSpec] => C:\WINDOWS\system32\cmd.exe [CONTENT_LENGTH] => 0 [FP_NO_HOST_CHECK] => NO [GATEWAY_INTERFACE] => CGI/1.1 [HTTP_ACCEPT] => */* [HTTP_ACCEPT_LANGUAGE] => fr-be [HTTP_CONNECTION] => Keep-Alive [HTTP_HOST] => localhost [HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; OfficeLiveConnector.1.1) [HTTP_COOKIE] => name=sfsdf; first_name=sdf; organisation=sdfsdfsd; email=michel%40iif.be; email_conf=michel%40iif.be [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTPS] => off [INSTANCE_ID] => 1 [LOCAL_ADDR] => 127.0.0.1 [NUMBER_OF_PROCESSORS] => 2 [OS] => Windows_NT [Path] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\QuickTime\QTSystem\ [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH [PROCESSOR_ARCHITECTURE] => x86 [PROCESSOR_IDENTIFIER] => x86 Family 6 Model 15 Stepping 6, GenuineIntel [PROCESSOR_LEVEL] => 6 [PROCESSOR_REVISION] => 0f06 [ProgramFiles] => C:\Program Files [QTJAVA] => C:\Program Files\Java\jre1.5.0_12\lib\ext\QTJava.zip [REMOTE_ADDR] => 127.0.0.1 [REMOTE_HOST] => 127.0.0.1 [REQUEST_METHOD] => GET [SCRIPT_NAME] => /ajaxify/test.php [SERVER_NAME] => localhost [SERVER_PORT] => 80 [SERVER_PORT_SECURE] => 0 [SERVER_PROTOCOL] => HTTP/1.1 [SERVER_SOFTWARE] => Microsoft-IIS/5.1 [SystemDrive] => C: [SystemRoot] => C:\WINDOWS [TEMP] => C:\WINDOWS\TEMP [TMP] => C:\WINDOWS\TEMP [USERPROFILE] => C:\Documents and Settings\LocalService [windir] => C:\WINDOWS [ORIG_PATH_TRANSLATED] => C:\USER\DATA\wwwroot\ajaxify\test.php [ORIG_PATH_INFO] => /ajaxify/test.php [ORIG_SCRIPT_NAME] => /ajaxify/test.php [SCRIPT_FILENAME] => C:\USER\DATA\wwwroot\ajaxify\test.php [PHP_SELF] => /ajaxify/test.php [argv] => Array ( ) [argc] => 0 )

Merci pour ton aide.

Mich.
Utilisateur anonyme
24 juin 2008 à 00:42
Salut Michelsto,

Il me semble que les superglobals ne sont pas les mêmes sous IIS et Apache - cad $_SERVER n'a pas les mêmes valeurs. Du coup ligne 3 du fichier lib/js_template.php ne doit pas être compatible IIS. En tout cas le pb vient du côté PHP / IIS que du côté compatibilité navigateur / JS.

Dans un fichier 'test.php' dans le même repertoire que tes scripts écris <?php print_r($_SERVER); ?> puis envoies-moi en MP le résultat, je vais voir ce qui ne passe pas et publierais un patch en fonction.

Sodams, tes remarques sont justes, tu utilises un style plutôt "compact" ce qui peut avoir son effet - diminuer les temps de parsing du script - perso j'aime bien mais malheureusement c'est peu lisible, voire pas lisible (en comparaison à une syntaxe plus classique).

Perso tu ne me verras jamais écrire comme ça car mon but est que le débutant de base arrive à intégrer et comprendre mes codes - enfin je l'espére et j'essaye de lui en faciliter la tâche. Mais bon après sur du CORE framework c'est tout autre chose - en tout cas ta remarque est pertinente.
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
23 juin 2008 à 13:07
Bonjour, cet outil à l'air super. j'ai essayé de le tester en local sur mon IIS et il me dit Error code 405 : Error to connect to http://localhost:80.
J'ai juste copié les source dans un répertoire en gardent la structure des dossier et j'ai exécuté demo_account ou demo_pannier et quand je clique soit pour ajouter un article ou pour simuler un login, j'ai le message. J'ai éssayé avec IE et Firefox idem.
Mon serveur fonctionne bien avec d'autre application web. Y compris les requête HTTPRequest

Qu'ai je fais ou pas fais de bien ?
Mich
cs_Sodams Messages postés 57 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 18 novembre 2009
22 juin 2008 à 13:26
J'aurai même fais return (isset($_SESSION['pannier']))? ($_SESSION['pannier'] : (array());

Encore une fois ce n'est pas une critique. :-)
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
22 juin 2008 à 10:58
A mon avis, il voulait juste dire "enlever le else", pas la ligne entiere.

function getProduits() {
if (isset($_SESSION['pannier'])) {
return $_SESSION['pannier'];
}
return array();
}

Moi j'aurais meme dit "enleve les accolades" , mais bon, chacun sa façon de coder =)
Utilisateur anonyme
22 juin 2008 à 01:03
Coucou a tout à fait raison, le résultat doit être un tableau, s'il est vide on boucle pas mais s'il ne l'est pas on boucle dessus pour traiter son contenu. Sans vérif du type on peut tomber sur des erreurs lors de l'utilisation du résultat - exemple : Array.length passe sur un tableau, mais si on retourne null et qu'on cherche sa property length il va pas aimer.

djlghoul, je viens de regarder ton site, c'est un peu le bazard tu mélanges tutos PHP, videos voitures, et téléchargements de films - conclusion manque de ligne directrice ou je ne l'ai pas saisie. Autre question, pourquoi avoir fait le choix de Joomla! ? Il te faudra maîtrise leur framework CORE pour y intégrer des lib et modifier leurs modules - leur système est loin d'être intuitif.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 juin 2008 à 00:06
si son else est utile pour le typage, tu peux avoir des notices sans ce else.
cs_Sodams Messages postés 57 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 18 novembre 2009
21 juin 2008 à 23:31
Voila le vote. ^^
cs_Sodams Messages postés 57 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 18 novembre 2009
21 juin 2008 à 23:29
Voilà quelque chose de bien coder et utile.
Un 10 pour monsieur.

Au fait :

# function getProduits() {
# if (isset($_SESSION['pannier'])) {
# return $_SESSION['pannier'];
# } else return array();
# }

Pas besoin du else :-)
djlghoul Messages postés 6 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 21 juin 2008
21 juin 2008 à 20:08
j'ai un site web mais j'aimerai bien l'organiser parceque il est totalement riche en tout les modules et les composants parmi eux moteur de recherche AJAX si quelqu'un a une idée ou quelque chose
vous pouvez vister le site puis me laisser des solutions ou des idée www.sami.10gbfreehost.com
Utilisateur anonyme
21 juin 2008 à 06:19
En plus d'être compatible PHP 4, mon code HTML est en 3.2 (lol). Pour la partie démo c'est du bloc notes du coup j'ai fait simple.

Vu c'est une lib, je me suis dit que tant qu'à faire qu'elle soit compatible si je ne dois pas sacrifier les perfs - mais rien ne vous empêche de faire vos classes en PHP5. Quand PHP 6 arrivera je n'en ferrais plus ...

Les résultats des executions (retour de vos fonctions) peuvent être des tableaux ou des objets, ou les deux - voir getProduits -> tableau contenant des objets de classe produit. Le tout est sérialisé en JSON. pour la partie sérialisation des classes js gérant les requettes AJAX c'est du pseudo JSON au niveau syntaxe - quant aux exemple c'est des fonctions afin de ne pas allourdir la lecture pour les novices.

Merci pour vos encouragements, ça fait chaud au coeur :)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
21 juin 2008 à 04:22
il te manque un tbody dans ta table, c'est nul, 1/10, et c'est parce-que je peux pas mettre 0 !

bon allez, j'arrete d'essayer de faire de l'humour, j'y arrive pas, 10/10, et je te pose quand meme quelques questions :

pourquoi tu fais pas du json ?
<script language="javascript"> => <script type="text/javascript">
et sacrifie php4 pour php5 serieux...
pj27 Messages postés 12 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 7 juillet 2008
20 juin 2008 à 20:08
Bien codé, bien pensé, et rien que pour le système et l'idée de ce projet, je mets 10.
Rejoignez-nous