Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AJAX TOOLKIT - PARTAGE DE CLASSES ENTRE PHP / JS


Information sur la source

Catégorie :Javascript / DHTML Classé sous : ajax, asynchronous, toolkit-library, class poo, php4-php5 Niveau : Initié Date de création : 20/06/2008 Date de mise à jour : 25/06/2008 16:36:10 Vu / téléchargé: 4 298 / 317

Note :
10 / 10 - par 6 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Faire le l'ajax c'est bien, mais c'est pas forcément évident. Ce toolkit prend en charge la partie controleur et vous propose un modéle hyper simpliste afin de facilement programmer en PHP puis en Javascript à travers l'AJAX et ce de manière INTUITIVE.

Le principe de base :

La partie serveur :

Vous faites un fichier PHP dans lequel vous créez une classe héritant de la classe ajaxify.
Vous créez des fonctions comme vous l'avez toujours fait. Ces fonctions seront accessible à partir de votre page (mode client) en faisant des appels javascript.

La partie client :

Dans votre page html, faites une référence à la lib : require_once('lib/ajaxify.class.php'); puis dans votre header html rajoutter une référence à la classe php que vous souhaitez utiliser : <?php ajaxify::AjaxClass('scripts/pannier.php', 'jsPannier'); ?>

Ensuite le reste c'est comme d'habitude en javascript - exemple : jsPannier.getProduits(...).

Vous avez deux fichiers en exemple pour comprendre un peu le fonctionnement et les possibilités de la librairie.

*** Détail techniques :

Dans la partie JS vous utilisez l'objet portant le même nom que la classe.

-> PHP :
class foo extends ajaxify {
  function bar() {}
}

-> JS :

foo.bar(function(result) {
  // do something
});

-- LE MODE SYNCHRONE --

Vous souhaitez intéroger le serveur et une fois qu'il aura répondu continuer l'execution de votre javascript en récupérant le résultat. C'est le mode synchrone.

PHP :
class foo extends ajaxify {
  function bar($name) {
    return 'Hello World '.$name;
  }
}

JS :
alert(foo.bar('aKh'));

-- LE MODE ASYNCHRONE --

Vous souhaitez lancer un chargement et pendant ce temps ne pas bloquer l'affichage, voire même mettre un petit message d'attente. C'est le mode asynchrone, et c'est conseillé pour les réponses nécéssitant un long temps de réponse.

PHP :
class foo extends ajaxify {
  function doSomething($name) {
    sleep(1);
    return 'Done '.$name;
  }
}

JS / HTML :
<div id="result">...</div>
<script language="javascript">
  document.getElementById('result').innerHTML = 'Wait ...';
  foo.doSomething('akh !', function(result) {
    document.getElementById('result').innerHTML = result;
  });
</script>
 

Source

  • <?php
  • /**
  • * EXEMPLE SIMULANT LA GESTION D'UN CADDIE SUR UN SITE ECOMMERCE
  • * AJAXIFY LIB
  • * @author I. CHIRIAC
  • * @license GNU/GPL
  • * @package AJAX
  • */
  • // REQUIRE AJAX LIBRARY
  • require_once('../lib/ajaxify.class.php');
  • // DEFINE A USER CLASS
  • class jsPannier extends ajaxify {
  • /**
  • * Gets a list of products
  • */
  • function getProduits() {
  • if (isset($_SESSION['pannier'])) {
  • return $_SESSION['pannier'];
  • } else return array();
  • }
  • /**
  • * Gets cart total
  • */
  • function getTotal() {
  • if (isset($_SESSION['pannier'])) {
  • $tot = 0;
  • foreach($_SESSION['pannier'] as $produit) {
  • $tot += $produit->getTotal();
  • }
  • return $tot;
  • } else return 0;
  • }
  • /**
  • * Empty cart
  • */
  • function viderPannier() {
  • $_SESSION['pannier'] = array();
  • return true;
  • }
  • /**
  • * Add a product to cart
  • */
  • function addProduit($ref, $titre, $pu, $qte = 1) {
  • if (!is_numeric($qte)) return false;
  • if ($qte < 0) return false;
  • if (!isset($_SESSION['pannier'][$ref])) {
  • $_SESSION['pannier'][$ref] = new produit();
  • $_SESSION['pannier'][$ref]->ref = $ref;
  • $_SESSION['pannier'][$ref]->titre = $titre;
  • $_SESSION['pannier'][$ref]->pu = $pu;
  • }
  • $_SESSION['pannier'][$ref]->qte += $qte;
  • return $_SESSION['pannier'][$ref]->qte;
  • }
  • /**
  • * Get total price for a product (by product reference)
  • */
  • function getRefTotal($ref) {
  • if (isset($_SESSION['pannier'][$ref])) {
  • return $_SESSION['pannier'][$ref]->getTotal();
  • } else return ' --- ';
  • }
  • /**
  • * Set a cart product quantity
  • */
  • function setQuantite($ref, $qte) {
  • if (!is_numeric($qte)) return false;
  • if ($qte < 0) return false;
  • if (isset($_SESSION['pannier'][$ref])) {
  • $_SESSION['pannier'][$ref]->qte = $qte;
  • return true;
  • } else return false;
  • }
  • /**
  • * Remove a product by ref
  • */
  • function removeProduit($ref) {
  • if (isset($_SESSION['pannier'][$ref])) {
  • unset($_SESSION['pannier'][$ref]);
  • return true;
  • } else return false;
  • }
  • /**
  • * Gets product data - by refrence
  • */
  • function getProduit($ref) {
  • if (isset($_SESSION['pannier'][$ref])) {
  • return $_SESSION['pannier'][$ref];
  • } else return false;
  • }
  • }
  • /**
  • * Product container
  • */
  • class produit {
  • /**
  • * Product Reference
  • */
  • var $ref;
  • /**
  • * Product Title
  • */
  • var $titre;
  • /**
  • * Product quantity
  • */
  • var $qte;
  • /**
  • * Product price per unit
  • */
  • var $pu;
  • /**
  • * Gets product total
  • */
  • function getTotal() {
  • if ($this->qte > 0) {
  • return $this->qte * $this->pu;
  • } else return 0;
  • }
  • }
  • // HANDLE REQUEST - SERVER ENTRY
  • session_start();
  • ajaxify::request();
  • ?>
  • <html>
  • <head>
  • <title>Ajax Demo</title>
  • <?php ajaxify::AjaxClass('scripts/pannier.php', 'jsPannier'); ?>
  • <script language="javascript">
  • function $(id) {
  • return document.getElementById(id);
  • }
  • function refreshPannier() {
  • $('pannier').innerHTML = 'Actualisation en cours ...';
  • jsPannier.getProduits(function(produits) {
  • if (produits.length == 0) {
  • $('pannier').innerHTML = 'Votre pannier est vide ...';
  • return false;
  • }
  • // TABLE HEADER
  • var html = '<table border="1"><tr><td class="head">REF</td><td class="head">TITRE</td><td class="head">QTE</td><td class="head">PU</td><td colspan="2" class="head">SOUS-TOTAL</td></tr>';
  • // CREATE TABLE
  • var total = 0;
  • for(i = 0; i < produits.length; i++) {
  • produit = produits[i];
  • html += '<tr><td>'+produit.ref+'</td><td>'+produit.titre+'</td>';
  • html += '<td><input type="text" size="6" value="'+produit.qte+'" onChange="setQuantite(\''+produit.ref+'\', this.value)" /><input type="button" value="ok" /></td>';
  • html += '<td>'+produit.pu+'</td><td id="'+produit.ref+'">'+(produit.pu*produit.qte)+' &euro; TTC</td>';
  • html += '<td><input type="button" value="Supprimer" onClick="removeProduit(\''+produit.ref+'\');" /></td></tr>';
  • total += produit.pu*produit.qte;
  • }
  • // TABLE FOOTER
  • html += '<tr><td colspan="4">&nbsp;</td><td colspan="2">'+total+' &euro; TTC</td></tr></table>';
  • $('pannier').innerHTML = html;
  • return true;
  • });
  • }
  • function setQuantite(ref, qte) {
  • if (jsPannier.setQuantite(ref, qte)) {
  • $(ref).innerHTML = jsPannier.getRefTotal(ref) + ' &euro; TTC';
  • } else {
  • alert('Impossible de modifier la quantite. Veuillez saisir un numerique.');
  • return false;
  • }
  • }
  • function removeProduit(ref) {
  • if (confirm('Etes-vous sur de supprimer la reference '+ref+' ?')) {
  • if (jsPannier.removeProduit(ref)) {
  • refreshPannier();
  • alert('Produit supprime !');
  • } else {
  • alert('Impossible de supprimer ce produit !');
  • }
  • }
  • }
  • function AjoutPannier() {
  • var ok = jsPannier.addProduit($('ref').value, $('titre').value, $('pu').value, $('qte').value);
  • if (ok) {
  • refreshPannier();
  • } else {
  • alert('Impossible d\'ajouter ce produit ...');
  • }
  • }
  • function ViderPannier() {
  • if (confirm('Souhaitez-vous vider votre pannier ?')) {
  • jsPannier.viderPannier();
  • refreshPannier();
  • }
  • }
  • </script>
  • <style type="text/css">...</style>
  • </head>
  • <body onLoad="refreshPannier()">
  • <h1>Votre pannier :</h1>
  • <div id="pannier">
  • ...
  • </div>
  • <a href="javascript:ViderPannier();">Vider le pannier</a>
  • <fieldset>...
<?php

	/**
	 * EXEMPLE SIMULANT LA GESTION D'UN CADDIE SUR UN SITE ECOMMERCE
	 * AJAXIFY LIB
	 * @author	I. CHIRIAC
	 * @license	GNU/GPL
	 * @package	AJAX
	 */

	// REQUIRE AJAX LIBRARY
	require_once('../lib/ajaxify.class.php');
	
	// DEFINE A USER CLASS
	class jsPannier extends ajaxify {
		/**
		 * Gets a list of  products
		 */
		function getProduits() {
			if (isset($_SESSION['pannier'])) {
				return $_SESSION['pannier'];
			} else return array();
		}
		/**
		 * Gets cart total
		 */
		function getTotal() {
			if (isset($_SESSION['pannier'])) {
				$tot = 0;
				foreach($_SESSION['pannier'] as $produit) {
					$tot += $produit->getTotal();
				}
				return $tot;
			} else return 0;
		}
		/**
		 * Empty cart
		 */
		function viderPannier() {
			$_SESSION['pannier'] = array();
			return true;
		}
		/**
		 * Add a product to cart
		 */
		function addProduit($ref, $titre, $pu, $qte = 1) {
			if (!is_numeric($qte)) return false;
			if ($qte < 0) return false;
			if (!isset($_SESSION['pannier'][$ref])) {
				$_SESSION['pannier'][$ref] = new produit();
				$_SESSION['pannier'][$ref]->ref = $ref;
				$_SESSION['pannier'][$ref]->titre = $titre;
				$_SESSION['pannier'][$ref]->pu = $pu;
			}
			$_SESSION['pannier'][$ref]->qte += $qte;
			return $_SESSION['pannier'][$ref]->qte;
		}
		/**
		 * Get total price for a product (by product reference)
		 */
		function getRefTotal($ref) {
			if (isset($_SESSION['pannier'][$ref])) {
				return $_SESSION['pannier'][$ref]->getTotal();
			} else return ' --- ';
		}
		/**
		 * Set a cart product quantity
		 */
		function setQuantite($ref, $qte) {
			if (!is_numeric($qte)) return false;
			if ($qte < 0) return false;
			if (isset($_SESSION['pannier'][$ref])) {
				$_SESSION['pannier'][$ref]->qte = $qte;
				return true;
			} else return false;
		}
		/**
		 * Remove a product by ref
		 */
		function removeProduit($ref) {
			if (isset($_SESSION['pannier'][$ref])) {
				unset($_SESSION['pannier'][$ref]);
				return true;
			} else return false;
		}
		/**
		 * Gets product data - by refrence
		 */
		function getProduit($ref) {
			if (isset($_SESSION['pannier'][$ref])) {
				return $_SESSION['pannier'][$ref];
			} else return false;
		}
	}

	/**
	 * Product container
	 */
	class produit {
		/**
		 * Product Reference
		 */
		var $ref;
		/**
		 * Product Title
		 */
		var $titre;
		/**
		 * Product quantity
		 */
		var $qte;
		/**
		 * Product price per unit
		 */
		var $pu;
		/**
		 * Gets product total
		 */
		function getTotal() {
			if ($this->qte > 0) {
				return $this->qte * $this->pu;
			} else return 0;
		}
	}

	// HANDLE REQUEST - SERVER ENTRY
	session_start();
	ajaxify::request();

?>

<html>
	<head>
		<title>Ajax Demo</title>
		<?php ajaxify::AjaxClass('scripts/pannier.php', 'jsPannier'); ?>
		<script language="javascript">
			function $(id) {
				return document.getElementById(id);
			}
			function refreshPannier() {
				$('pannier').innerHTML = 'Actualisation en cours ...';
				jsPannier.getProduits(function(produits) {
					if (produits.length == 0) {
						$('pannier').innerHTML = 'Votre pannier est vide ...';
						return false;
					}
					// TABLE HEADER
					var html = '<table border="1"><tr><td class="head">REF</td><td class="head">TITRE</td><td class="head">QTE</td><td class="head">PU</td><td colspan="2" class="head">SOUS-TOTAL</td></tr>';
					// CREATE TABLE
					var total = 0;
					for(i = 0; i < produits.length; i++) {
						produit = produits[i];
						html += '<tr><td>'+produit.ref+'</td><td>'+produit.titre+'</td>';
						html += '<td><input type="text" size="6" value="'+produit.qte+'" onChange="setQuantite(\''+produit.ref+'\', this.value)" /><input type="button" value="ok" /></td>';
						html += '<td>'+produit.pu+'</td><td id="'+produit.ref+'">'+(produit.pu*produit.qte)+' &euro; TTC</td>';
						html += '<td><input type="button" value="Supprimer" onClick="removeProduit(\''+produit.ref+'\');" /></td></tr>';
						total += produit.pu*produit.qte;
					}
					// TABLE FOOTER
					html += '<tr><td colspan="4">&nbsp;</td><td colspan="2">'+total+' &euro; TTC</td></tr></table>';
					$('pannier').innerHTML = html;
					return true;
				});
			}
			function setQuantite(ref, qte) {
				if (jsPannier.setQuantite(ref, qte)) {
					$(ref).innerHTML = jsPannier.getRefTotal(ref) + ' &euro; TTC';
				} else {
					alert('Impossible de modifier la quantite. Veuillez saisir un numerique.');
					return false;
				}
			}
			function removeProduit(ref) {
				if (confirm('Etes-vous sur de supprimer la reference '+ref+' ?')) {
					if (jsPannier.removeProduit(ref)) {
						refreshPannier();
						alert('Produit supprime !');
					} else {
						alert('Impossible de supprimer ce produit !');
					}
				}
			}
			function AjoutPannier() {
				var ok = jsPannier.addProduit($('ref').value, $('titre').value, $('pu').value, $('qte').value);
				if (ok) {
					refreshPannier();
				} else {
					alert('Impossible d\'ajouter ce produit ...');
				}
			}
			function ViderPannier() {
				if (confirm('Souhaitez-vous vider votre pannier ?')) {
					jsPannier.viderPannier();
					refreshPannier();
				}
			}
		</script>
		<style type="text/css">...</style>
	</head>
	<body onLoad="refreshPannier()">
		<h1>Votre pannier :</h1>
		<div id="pannier">
			...
		</div>
		<a href="javascript:ViderPannier();">Vider le pannier</a>
		<fieldset>...

Conclusion

AVANTAGES :

* Pas de collision des noms de fonctions - encapsulation dans les noms de classes.
* Gestion intuitive des requettes synchrones et asynchrones.
* Pas besoin de se soucier de la couche AJAX & CONTROLEUR PHP.
* Poids insignifiant - la lib < 10 ko.
* Pas de config supplémentaire ou autre - c'est du plug & play
* Compatible PHP 4 et PHP 5
* Compatible IIS / Apache / IE 6 / IE 7 / Mozilla
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

20 juin 2008 18:56:27 :
J'oubliais : compatible php 4 et 5
25 juin 2008 16:36:10 :
- Ajout compatibilité IIS - Ajout compatibilité IE6

Commentaires et avis

signaler à un administrateur
Commentaire de pj27 le 20/06/2008 20:08:43 10/10

Bien codé, bien pensé, et rien que pour le système et l'idée de ce projet, je mets 10.

signaler à un administrateur
Commentaire de coucou747 le 21/06/2008 04:22:03 10/10

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...

signaler à un administrateur
Commentaire de aKheNathOn le 21/06/2008 06:19: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 :)

signaler à un administrateur
Commentaire de djlghoul le 21/06/2008 20:08:13

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

signaler à un administrateur
Commentaire de Sodams le 21/06/2008 23:29:27

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 :-)

signaler à un administrateur
Commentaire de Sodams le 21/06/2008 23:31:52 10/10

Voila le vote. ^^

signaler à un administrateur
Commentaire de coucou747 le 22/06/2008 00:06:53

si son else est utile pour le typage, tu peux avoir des notices sans ce else.

signaler à un administrateur
Commentaire de aKheNathOn le 22/06/2008 01:03:43

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.

signaler à un administrateur
Commentaire de winwarrior le 22/06/2008 10:58:24

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 =)

signaler à un administrateur
Commentaire de Sodams le 22/06/2008 13:26:22

J'aurai même fais return (isset($_SESSION['pannier']))? ($_SESSION['pannier'] : (array());

Encore une fois ce n'est pas une critique. :-)

signaler à un administrateur
Commentaire de michelsto le 23/06/2008 13:07:29

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

signaler à un administrateur
Commentaire de aKheNathOn le 24/06/2008 00:42:12

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.

signaler à un administrateur
Commentaire de michelsto le 24/06/2008 06:53:36

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.

signaler à un administrateur
Commentaire de aKheNathOn le 24/06/2008 10:09:11

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.

signaler à un administrateur
Commentaire de michelsto le 24/06/2008 10:22:36

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

signaler à un administrateur
Commentaire de aKheNathOn le 24/06/2008 10:32:27

Ok, je monte un IIS avec PHP - en message privé tu peux me donner les versions de PHP, IIS et IE.

signaler à un administrateur
Commentaire de aKheNathOn le 25/06/2008 16:37:19

C'est ok sous IIS/Apache et compatible sous IE 6 et autres

signaler à un administrateur
Commentaire de michelsto le 25/06/2008 20:56:10 10/10

Ca fonction nikel maintenant.
Encore merci pour ce super code. 10/10
Michel

signaler à un administrateur
Commentaire de steph_dev_o le 17/08/2008 20:08:26 10/10

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


signaler à un administrateur
Commentaire de aKheNathOn le 22/08/2008 16:34:17

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

signaler à un administrateur
Commentaire de gigamaster le 15/12/2008 10:43:28 10/10

Merci, je m'en vais tester cette approche qui semble bien pratique ^^

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

XmlHttpRequest (AJAX) [ par BenXbox ] Salut à tous, Je cherche à actualiser une page avec le XmlHttpRequest(AJAX) toutes les 20 secondes. Cette page s'appel EnLigne.php Merci d'avance. Probléme avec AJAX [ par BenXbox ] Salut &#224; tous, Voila j'utilise AJAX pour mon site pour savoir si j'ai des nouveaux messages priv&#233;s. J'utilise le XHRConnection.js du site : h Upload progress bar avec ajax [ par Linuss ] Bonjour &#224; tous, J'ai trouv&#233; sur internet pas mal de scripts d'upload, mais chacun avait ses inconv&#233;nients : <a h Ajax - Redirection [ par BeCaSiNe ] Bonjour a tous, je cherche le moyen de faire une redirection avec une page en PHP, qui a &#233;t&#233; ouverte dans un div par un lien. Le seule probl mise a jour de graph via AJAX? [ par LaTatadu91 ] Bonjour a tous; voila&nbsp; sur uen de mes pages php je cr&#233;&#233; un graphique(diagrmme en batons+courbes) a partir de donn&#233;es MYSQL ces d Différence ajax / iframe [ par ravery ] Bonjour.Alors, voil&#224; je m'interresse &#224; Ajax pour voir un peut les avantages / inconv&#233;nients de cette technologie et je ne comprend pas Pb de sécurité avec Ajax et XMLHttpRequest [ par cz1702 ] Bonjour &#224; tous,est il possible d'ouvrir une page sur un autre domaine que celui du site en cours avec XMLHttpRequest (sans contraindre l'utilisat Fonctionnement AJAX et XMLHTTPRequest [ par stiml ] Bonjour,Voila j'ai r&#233;cup&#233;rer une script sur un site qui explique tr&#232;s bien comment fonctionne AJAX et XMLHTTPRequest.voici l'adresse : Tuto d'Ajax sur phpcs [ par Evangun ] Salut tout le monde,je me suis mis &#224; Ajax aujourd'hui et je voulais signaler que le tuto http://www.phpcs.com/ajax.aspxne marche pas sous firefox Aide pour RPG AJAX CREATOR [ par malalam ] Salut tout le monde,bon, j'ai commenc&#233; un projet, il y a quelques temps, qui me tient &#224; coeur. J'ai fini par le baptiser RPG AJAX CREATOR.So


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Vidéos drôles Nouveau