Utilisation d'une bibliothèque de tri avec AJAX

Bonjour,

J’ai découvert une superbe bibliothèque pour faire des tris de tableaux combinée avec jquery via

www.javascripttoolbox.com…

Cependant, j’ai des tableaux de données appelés via AJAX et je n’arrive pas à appeler les classes de cette lib alors qu’elle marche nickel lorsque je suis dans un fichier HTML classique sans AJAX. C’est pourquoi si quelqu’un pouvait m’aider à intégrer cette librairie lors de mes appels AJAX, aura toute ma gratitude :jap:.

Merci d’avance de votre aide.
Edité le 08/02/2008 à 11:58

Pour commencer, installe l’extension Firebug pour Firefox, ça t’aidera dans ta résolution des problèmes.

Pour continuer, as tu une page exemple?

Bonjour, j’ai déjà firebux d’installer. Il n’y a pas d’erreur mais c’est juste les attributs class de la mage php appelée qui ne s’execute pas. Voici un exemple :

function go_reference(){//Fonction qui va effectuer la requête de recherche via AJAX
				//alert(document.getElementById('zonecache').value);
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					//On attends le chargement
				if(xhr.readyState == 1) 
				{
					
					document.getElementById("Ref").innerHTML = "<div align='center'><br><img src='chargement.gif' width='17' height='17' /><br><br>chargement...</div>";//insertion d'un gif pendant le chargement
  			
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
				}
				else if(xhr.readyState == 4 && xhr.status == 200){
						var c = document.getElementById('Ref');
						//alert(xhr.responseText);
						c.innerHTML = xhr.responseText;
						//maintenant que les données reçu on été placé dans la page,
						//il faut exécuter toutes les balise script :
						var allscript = c.getElementsByTagName('script');
						for(var i=0;i< allscript.length;i++){
							window.eval(allscript[i].text);				
						}
					}
				}
                                if(document.getElementById("OrderCode").value==''){//si ordercode=vide
							xhr.open("POST","OrderCode_Vide.php",true);
							xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded','charset=iso-8859-15');
							sel = document.getElementById("OrderCode").value;
							xhr.send("OrderCode="+sel+"&date_liv="+date_liv+"&date_liv2="+date_liv2+"&vente_debut="+vente_debut+"&vente_fin="+vente_fin);
						}
						else{
							xhr.open("POST","OrderCode.php",true);
							xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded','charset=iso-8859-15');
							sel = document.getElementById("OrderCode").value;
							xhr.send("OrderCode="+sel+"&date_liv="+date_liv+"&date_liv2="+date_liv2+"&vente_debut="+vente_debut+"&vente_fin="+vente_fin);
						}

Voici une de mes pages php appelée, comme les autres elle fait une requête SQL via SQL Server. Les données sont correctement affichées mais les class ne s’executent pas.

<?php
	include ('./Connection_DB.php');
	header('Content-Type: text/html; charset=ISO-8859-15');
	if(isset($_POST["OrderCode"])){ // Ici la requête pour afficher le modèle selon la référence
		$res = mssql_query("
		SELECT DISTINCT			sum(element.prixachat) AS 'prix_achat', element.iddoc,						
								client.identite, AFFAIRE_BIS.date_liv,
								AFFAIRE_BIS.GROUP_NAME,
								CONVERT(varchar,affaire_bis.date_vente,101)  AS date_vente,
								--RIGHT(REPLACE(REPLACE(RIGHT(affaire_bis.date_liv, len(affaire_bis.date_liv) - charindex('/', affaire_bis.date_liv)) + replicate('0', 2 - len(LEFT(affaire_bis.date_liv, charindex('/', affaire_bis.date_liv) - 1))) + LEFT(affaire_bis.date_liv, charindex('/', affaire_bis.date_liv) - 1),' ',''),'/',''),4) AS 'test',
								USERSA.USER_NAME, element.nom--,

		FROM					element inner join clipro2 on element.Clipro2_idClipro2 = clipro2.idclient INNER JOIN
								document on element.iddoc = document.iddocu INNER JOIN
								affaire_bis on element.iddoc = affaire_bis.id_affaire INNER JOIN
								CLIPRO2 as client ON DOCUMENT.IDCLIENT = CLIENT.IDCLIENT FULL OUTER JOIN
								USERSA ON affaire_bis.UID = USERSA.UID INNER JOIN element_dlt ed ON
								element.idElement = ed.id_Element INNER JOIN dlt d ON
								ed.id_DLT = d.idDLT
		WHERE					--element.Clipro2_idClipro2 = '445' AND
								(DOCUMENT.ID_STATUS = '1002') AND
								(
									(RIGHT(REPLACE(REPLACE(RIGHT(affaire_bis.date_liv, len(affaire_bis.date_liv) - charindex('/', affaire_bis.date_liv)) + replicate('0', 2 - len(LEFT(affaire_bis.date_liv, charindex('/', affaire_bis.date_liv) - 1))) + LEFT(affaire_bis.date_liv, charindex('/', affaire_bis.date_liv) - 1),' ',''),'/',''),4) BETWEEN ".$_POST["date_liv"]." AND ".$_POST["date_liv2"]."
									 AND (LEN(affaire_bis.date_liv)=7 OR LEN(affaire_bis.date_liv) = 6 OR LEN(affaire_bis.date_liv) = 5)
									) 
								) AND affaire_bis.date_vente >= '".$_POST["vente_debut"]."' AND affaire_bis.date_vente <= '".$_POST["vente_fin"]."' AND
								element.CatReport_idCatReport <> 11 and
								element.CatReport_idCatReport <> 12 and
								element.CatReport_idCatReport <> 13 and
								element.CatReport_idCatReport <> 14 AND element.PrixAchat <>0.00 AND
								element.OrderCode NOT LIKE '%RIU%' AND
								AFFAIRE_BIS.GROUP_NAME NOT LIKE '%FORM%' --AND d.nom LIKE '%05 Tenes%'
								AND affaire_bis.date_liv NOT LIKE '%a%' AND element.OrderCode LIKE '%".$_POST["OrderCode"]."%'
		GROUP BY 				element.prixachat, element.iddoc,
								affaire_bis.date_liv,
								client.identite,
								AFFAIRE_BIS.GROUP_NAME ,
								USERSA.USER_NAME,
								affaire_bis.date_vente, element.nom   
		ORDER BY affaire_bis.Group_NAME, client.identite, AFFAIRE_BIS.date_liv;");
		$total = mssql_num_rows($res);
		$total = utf8_decode($total);
	}
	else
	{
		echo '';
	}
// si on a récupéré un résultat on l'affiche.
		if($total) {
    // début de la liste, affichage par tableau ds les commentaires
			echo '<br>Résultats de la recherche<br>';
			//echo '<input type="text" class="calendrier">';
			echo '<table bgcolor="#FFFFFF" class="example sort01 table-autosort table-autofilter table-autopage:10 table-stripeclass:alternate table-page-number:t1page table-page-count:t1pages table-filtered-rowcount:t1filtercount table-rowcount:t1allcount" id="Reference">'."\n";
        // première ligne on affiche les titres id et statut dans 3 colonnes
			echo '<tr>';
			echo '<th bgcolor="#FF6633" class="table-sortable:currency"><b><u>Prix Achat</u></b></th>';
			echo '<th bgcolor="#FF6633" class="table-sortable:default"><b><u>Numéro bon de commande</u></b></th>';
			echo '<th bgcolor="#FF6633" class="table-sortable:date"><b><u>Date de livraison</u></b></th>';
			echo '<th bgcolor="#FF6633" class="table-filterable table-sortable:default"><b><u>Client</u></b></th>';
			echo '<th bgcolor="#FF6633" class="table-filterable table-sortable:default"><b><u>Magasin</u></b></th>';
			/*echo '<th bgcolor="#FF6633" class="table-sortable:numeric"><b><u>Téléphone</u></b></td>';
			echo '<th bgcolor="#FF6633" class="table-sortable:numeric"><b><u>Adresse</u></b></td>';
			echo '<th bgcolor="#FF6633" class="table-sortable:numeric"><b><u>Ville</u></b></td>';
			echo '<th bgcolor="#FF6633" class="table-sortable:numeric"><b><u>Code Postal</u></b></td>';
			echo '<th bgcolor="#FF6633" class="table-sortable:numeric"><b><u>Pays</u></b></td>';*/
			echo '<th bgcolor="#FF6633" class="table-sortable:date"><b><u>Date de vente</u></b></td>';
			echo '<th bgcolor="#FF6633" class="table-filterable table-sortable:default"><b><u>Vendeur</u></b></td>';
			echo '<th bgcolor="#FF6633" class="table-filterable table-sortable:default"><b><u>Nom élément</u></b></td>';
			echo '</tr>'."\n";
    // lecture et affichage des résultats sur 3 colonnes, 1 résultat par ligne.   
			/*$m="mod";
			echo '<select name='.$m.' id='.$m.'>';
			$i=0;*/
			while($row = mssql_fetch_array($res)) {
				//echo '<script type="text/javascript">alert("je suis le big boss");</script>';
				echo '<tr class="alternate">';
				echo '<td bgcolor="#CCCCCC">'.$row["prix_achat"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["iddoc"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["date_liv"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["identite"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["GROUP_NAME"].'</td>';
				/*echo '<td bgcolor="#CCCCCC">'.$row["tel"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["adr1"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["cdp"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["ville"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["pays"].'</td>';*/
				echo '<td bgcolor="#CCCCCC">'.$row["date_vente"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["USER_NAME"].'</td>';
				echo '<td bgcolor="#CCCCCC">'.$row["nom"].'</td>';
				echo '</tr>'."\n";
			/*echo '<option value='.$i.'>'.$row["nom"].'</option>';
			$i=$i+1;*/
	  
			}
			echo'</select><br>';
			echo '</table>'."\n";
    // fin du tableau.
		}
		else
		{
			echo '<br>Aucun résultat ne correspond à votre recherche';
		}

?>		
 

Edité le 11/02/2008 à 09:44

Outre l’inutilité de ça : $total = utf8_decode($total), je dirais que tu te fourvoies dans ton test.

Ce n’est pas parce que SQLServer te renvoie via mssql_num_rows X tuples, qu’il y en a forcément X (c’est débile, mais je sais que dans mySQL sous certaines conditions tu peux ne pas obtenir le nombre de résultats corrects). Essaye sans cette condition, dans un premier temps, voire essaye la requête SQL dans SQLServer.

J’ai déjà tesé la requête, elle marche et pour le utf8_decode j’avais un problème avec l’affichage des caractères spéciaux donc j’ai foutu un peu tout et n’importe quoi et sans que je sache pourquoi l’affichage est devenu correct :@ donc j’ai laissé comme ça.

Alors je suspecte mssql_num_rows de te renvoyer tout sauf ce que tu désires.

A moins que isset($_POST[“OrderCode”]) = false?

De manière générale, reprend un brin ton code, dans ce genre :

header('...');
if (isset($_POST["OrderCode"])) {
  $res = mssql_query('...');
  for ($i = 0; $row = mssql_fetch_row($res); ++$i) {
    if ($i == 0) {... echo <table>...}
    // echo ligne
  }
  if ($i > 0) { // echo </table>
  }
}

Ca sera plus clair, et ça t’évitera quelques problèmes