IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Objets XMLHttpRequest <-> Sql


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut [AJAX] Objets XMLHttpRequest <-> Sql
    Bonjour à tous,

    Je m'adresse à ceux qui ont déjà utilisés les objets XMLHttpRequest du javascript plus particulièrement.
    Voilà le blem :

    J'ai un formulaire de selection de maison à faire, les critères sont le type de logement (maisons, appart, etc), le lieu, le prix... et j'en passe.
    Le bouton de validation permet de faire ma requete de selection dans une base de donnée MySQL via un obket XMLHttpRequest.
    L'objet XMLHttpRequest en question récupère les éléments de selection du formulaire et les soumet à un script PHP chargé de faire la requete sur la base de donnée. Ce script PHP effectue la requete, et lorsque la requete donne des résultats, ce script écrit dans la foulée des données javascript de manière à ce qu'au retour, l'objet XMLHttpRequest interpréte et modifie dynamique une <DIV> de la page courante (div d'affichage des résultats)

    Tout cela fonctionne tres bien, seulement lorsqu'il y a beaucoup d'élement de réponse (beaucoup de mainson qui correspondent à la requete de selection), rien ne se passe car il y a une erreur javascript :

    Erreur : Unterminated string literal
    Fichier source : ....
    "133000","montendre","Maison en RDC : Cuisine, sejour ... "



    Et il met la petite fleche d'erreur sur le "M" de maison. :s

    Donc voilà, autre information : la chaine "Maison en RDC..." proviens d'un champ de type "text" de la base de donnée.

    Je me demandais pourquoi cette erreur arrivait et s'il s'agissait éventuellemnet d'un probleme de taille du retour de la requete dans l'objet XMLHttpRequest.

    Si quelqun pouvait me sauver, je lui en serais tres reconnaissant

    Merci à vous

  2. #2
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Je me demandais aussi s'il n'y aurait pas un problème de taille avec l'objet XMLHttpRequest ? (le type TEXT de ma base de données prend peut etre beaucoup de place ?!)

    Help me please

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Bonjour, quelques pistes :

    Quelle est la méthode d'envoi de tes données GET ou POST ?
    Si c'est GET, je ne suis pas certain mais il est possible que tu sois confronté à des limitations.

    Encodes-tu les variables envoyées ?
    Je sais que j'ai rencontré ton problème au début.
    Je l'ai résolu par l'utilisation de encodeURIComponent

  4. #4
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Merci de ta réponse, mais mon probleme n'est pas lorsque je fais appel à mon script PHP depuis mon XMLHttpRequest, mais lorsque l'objet XMLHttpRequest "évalue" le retour du script php, donc mes instructions javascript.

    Sinon mes paramètres sont passés en POST et non encryptés à mon script php.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Je penche alors pour un problème côté PHP et non javascript (J'ai eu également ce souci -> retour de variables traitées par PHP vers JS)

    Oriente tes recherches vers la fonction utf8_decode de php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    utf8_decode(ta_chaine_de_retour_vers_javascript);
    ?>

  6. #6
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Même s'il s'agit de code javascript en retour ?

    Voilà précisément mon script php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    <?php
     
    	require "../db_fns.php" ;
    	require "../config/final_var.php";
     
    	$valide = true;
    	// Récupération des données passées en paramètres au script :
    	if ( isset($_POST["state"]) ) $state = $_POST["state"];
    	else $valide = false;
    	if ( isset($_POST["city"]) )$city = $_POST["city"];
    	else $valide = false;
    	if ( isset($_POST["minprice"]) ){
    		$tmp = explode('$',$_POST["minprice"]);
    		$minprice = $tmp[0];
    	}
    	else $valide = false;
    	if ( isset($_POST["maxprice"]) ){
    		$tmp = explode('$',$_POST["maxprice"]);
    		$maxprice = $tmp[0];
    	}
    	else $valide = false;
    	if ( isset($_POST["type"]) )$type = $_POST["type"];
    	else $valide = false;
    	if ( isset($_POST["order"]) )$orderBy = $_POST["order"];
    	// Valeur par défaut pour le tri des résultats :
    	else $orderBy = "price";
     
    	// Si tous les paramètres sont OK, connection à la base de donnée :
    	if ( $valide && ($conn = db_connect()) != null ){
     
    		// Requête de selection en fonction des informations selectionnées dans le formulaire :
    		$query = "SELECT h.id, h.title, h.address, h.city, h.state, h.zip, h.price, h.previewdesc, h.type, h.imageloc
    					FROM homes h, type t 
    					WHERE h.city = '".$city."' 
    					AND h.state = '".$state."' 
    					AND h.type = t.libelle_type 
    					AND t.id_type = '".$type."' ";
     
    		if ( $minprice != null )
    			$query .= "AND h.price >= '".$minprice."' ";
    		if ( $maxprice != null && $maxprice != -1 )
    			$query .= "AND h.price <= '".$maxprice."' ";
    		$query .= "ORDER BY h.".$orderBy;
     
     
    		$result = @mysql_query($query);
     
    		// Fermeture de la connexion à la base :
    		deconnect($conn,0);
     
    		$affichage = "";
     
    		if ( $result != null ) {
    			$nbAnnonces = @mysql_num_rows($result);
    			if ( $nbAnnonces == 0 ){
    				$affichage .= 'var dive = document.getElementById("'.$LABEL_DIV_RES.'");'; 
    				$s = "<CENTER>Nous n'avons aucun article en vente qui puisse correspondre à votre demande</CENTER>";
    				$s = removeaccents($s);
    				$affichage .= 'dive.innerHTML = "'.$s.'";';
     
    			}
    			else {
    				echo 'journal = new Journal();';
    				echo 'journal.CreatePage();';
    				echo 'var page = journal[journal.nbPage - 1];';
    				$num_Annonce = 1;
    				while ( $line = @mysql_fetch_array($result) ){
    					// --- Maximum d'annonce par page atteind, nouvelle page a créer
    					if ( $num_Annonce == ($MAX_ANNONCE_PER_PAGE + 1) ){
    						$num_Annonce = 1;
    						echo 'journal.CreatePage();';
    						echo 'page = journal[journal.nbPage - 1];';
    						echo 'alert("nouvelle page crée");';
    					}
    					$title = removeaccents($line["title"]);
    					$address = removeaccents($line["address"]);
    					$city = removeaccents($line["city"]);
    					$desc = removeaccents($line["previewdesc"]);
    					$state = removeaccents($line["state"]);
    					$type = removeaccents($line["type"]);
    					echo 'page.AddAnnonce("'.$line["id"].'","'.$title.'","2006-11-01","'.$line["price"].'","'.$line["imageloc"].'","'.$desc.'","'.$address." ".$line["zip"]." ".$city." [".$state."]".'","'.$type.'");';
     
    					$num_Annonce++;
    				}
    				echo 'journal.DisplayPage("'.$LABEL_DIV_RES.'");';
    			}
    		}
    	}
    ?>
    Le fonction javascript qui appelle le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    function traitement3 (  ){
     
    	// --- Retrieve state, city, min_price, max_price and type values
    	var states = document.forms[0].state;
    	var state = states[states.selectedIndex].value;
     
    	var cities = document.forms[0].city;
    	var city = cities[cities.selectedIndex].value;
     
    	var maxprices = document.forms[0].prixmax;
    	var maxprice = maxprices[maxprices.selectedIndex].value;
     
    	var minprices = document.forms[0].prixmin;
    	var minprice = minprices[minprices.selectedIndex].value;
     
    	var types = document.forms[0].type;
    	var type = types[types.selectedIndex].value;
     
    	if ( verif(state,city,minprice,type) )
    	{
    		// All values are OK, launch the request
    		var xhr_object = null; 
     
    	   if(window.XMLHttpRequest) // Firefox 
    	      xhr_object = new XMLHttpRequest(); 
    	   else if(window.ActiveXObject) // Internet Explorer 
    	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    	   else { // XMLHttpRequest non supporté par le navigateur 
    	      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	      return; 
    	   } 
     
    	   xhr_object.open("POST", "./traitements/traitement2.php", true);
     
    	   xhr_object.onreadystatechange = function() { 
    	      if(xhr_object.readyState == 4) {
    			 //alert(xhr_object.responseText); // DEBUG MODE
    	         eval(xhr_object.responseText);
    		  }
    	   } 
     
    	   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	   var data = "state="+state+"&city="+city+"&minprice="+minprice+"&maxprice="+maxprice+"&type="+type;
    	   xhr_object.send(data);
    	}
     
    }
    Le script PHP est donc chargé de construire un journal d'annonces pour les entrées récupérées de la requêtes, puis de les afficher (fonction journal.DisplayPage(...) )

    Ce qui cloche c'est le paramètre 'desc' qui est tres long puisqu'il s'agit d'une description.
    Ce qui est bizarre c'est que lorsqu'il y a deux à trois maisons de selectionnées, ca passe nickel, mais des qu'il y en a plus ca merde :s

    Donc sinon, les code que tu me dit, je le passerai donc où précisément ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Question AJAX / objet XMLHttpRequest
    Par michael rossi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/05/2008, 13h31
  2. [AJAX] documentation de l'objet XMLHttpRequest
    Par linkin_khalid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/10/2006, 17h29
  3. [AJAX] concatenation ajax objet
    Par klimero dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/04/2006, 11h16
  4. l'objet XMLHTTPRequest
    Par rosros dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 02/03/2006, 12h58
  5. Objets XMLHTTPRequest
    Par alain31tl dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/12/2005, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo