Ajax et php objet

Résolu/Fermé
skflers61 Messages postés 43 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 21 novembre 2014 - 4 avril 2014 à 13:19
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 4 avril 2014 à 14:11
Bonjour,


Je viens de me lancer dans l'ajax aujourd'hui et j'essaye de faire des listes liées. Je suis le tutoriel qui est ici https://siddh.developpez.com/articles/ajax/#LIV-A mais avec ma base de données qui est un fichier .mdb.

Pour l'instant je n'est fait que la première partie(réponse au format texte), c.a.d sans la partie responseXML. Je vais passer à la suite une fois que j'aurais régler mon problème.

Voilà mon problème:
Quand j'adapte le code php du tuto qui traite la requete ajax, sa marche:
<?php
echo "<select name='livre'>";

//connexion BDD
$pdo = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\wamp\www\stage_info\developpement\Crystal.mdb;Uid=",
	"", "", array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

//requete SQL
$sql="SELECT CODE_LIGNE,DESI_LIGNE, count(*) FROM ENTETES_CARTES_PAPIER where CODE_UP='CA' and  CODE_ATEL='00' group by CODE_LIGNE,DESI_LIGNE";
$resultats = $pdo->query($sql);
$resultats->setFetchMode(PDO::FETCH_OBJ);
while($res = $resultats->fetch()){
	echo "<option value='".$res->CODE_LIGNE."'>".$res>-CODE_LIGNE."</option>";
}
$resultats->closeCursor();
echo "</select>";
?>


Le problème c'est que je travail en php objet, et donc que j'ai des fonctions qui me permettent de faire ma connexion à ma bdd, mes requetes sql, mais qui se trouve dans d'autres fichiers. J'essaye d'adapter mon code, ce qui me donne ceci:

<?php
require_once 'Saisie.php';

class  ajaxLivre extends Saisie {	

	private $varSaisie;
	
	function __construct() {
		$this->varSaisie = new Saisie();
		
	}
	
	public function traitementAjax() {
		echo "<select name='livre'>";
		
		//execute requete sql pour récupérer mes Lignes par Atelier
		$resultats = $this->varSaisie->recupLigneParAtelier('00'); 	
		
		$resultats->setFetchMode(PDO::FETCH_OBJ);
		while( $resultat = $resultats->fetch() ){
			echo "<option value='".$resultat->CODE_LIGNE."'>".$resultat->CODE_LIGNE."</option>";
		}
		$resultats->closeCursor();
		
		echo "</select>";
	}
	
	
}
?>

Ma fonction recupLigneParAtelier() est dans Saisie.php.

Je ne sais pas comment faire pour appeler ma fonction traitementAjax() depuis mon code javascript.

Voici mon code javascript:
<script type='text/javascript'>

function getXhr(){
					var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
	   xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject){ // Internet Explorer 
	   try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
	}
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
	   xhr = false; 
	} 
					return xhr;
}

/**
* Méthode qui sera appelée sur le click du bouton
*/
function go(){
	var xhr = getXhr();
	// On défini ce qu'on va faire quand on aura la réponse
	xhr.onreadystatechange = function(){
		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
		if(xhr.readyState == 4 && xhr.status == 200){
			leselect = xhr.responseText;
			// On se sert de innerHTML pour rajouter les options a la liste
			document.getElementById('livre').innerHTML = leselect;
		}
	}

	// Ici on va voir comment faire du post
	xhr.open("POST","ajaxLivre.php",true);
	// ne pas oublier ça pour le post
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	// ne pas oublier de poster les arguments
	// ici, l'id de l'auteur
	sel = document.getElementById('auteur');
	idauteur = sel.options[sel.selectedIndex].value;
	xhr.send("idAuteur="+idauteur);
}
</script>


Comment fait-on pour utiliser le php objet(avec des classes, des fonctions,..) dans une requete ajax(ou plutôt dans la page php qui est appelée par la requete ajax)?


1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
4 avril 2014 à 14:11
Salut,

Javascript n'a aucune informations sur la façon dont est codé ton script et ne peut donc pas appeler un méthode de classe. Il appel un fichier php et il attend un retour.

Tu dois donc exécuter toi-même la méthode désirée dans le fichier appelé par le script ajax. Par exemple :
ajax.php
<?php
require 'ajaxLivre.php';

$al = new ajaxLivre();

echo $al->traitementAjax();


Bonne journée
0