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

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    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 habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    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
    Futur 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
    Points : 6
    Points
    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 habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    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
    Futur 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
    Points : 6
    Points
    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 habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    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 ?

  7. #7
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    copie le code complet renvoyé par ton AJAX et mets le sur le forum... ce n'est que comme ca qu'on pourra voir la faute...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Okai, je ferais ca ce soir de retour chez moi

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Alors, voilà UN résultat qui fonctionne du fait qu'il n'y ai qu'une seule maison correspondant aux critères de recherche. Il s'agit de ce qui est retourné par le script PHP pour etre interprété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var journal = new Journal();journal.CreatePage();var page = journal[journal.nbPage - 1];journal.CreatePage();page = journal[journal.nbPage - 1];page.AddAnnonce("12","CHARENTAISE A RENOVER","2006-11-01","109100","70_courpignac_ramecourt_031.jpg","Entr?e-cuisine avec chemin?e, petit salon chemin?e, 3 chambres, Douche-WC, arri?re cuisine, confiturier. Garage avec grande d?pendance, terrain.","Bergeuil 7 Km MONTENDRE 17130 [france]","Maison");journal.DisplayPage("journal");
    Sinon en cas d'erreur je ne peux pas tout afficher.. mais en gros il bloque en plein milieu d'une chaine de caractère de page.AddAnnonce("12","...","2006..","109...","....jpg","... ICI ...",...);


    Et le fais de renvoyer via la fonction utf8_decode ne change rien :/

    Je pense qu'il s'agit donc bien d'un probleme de dépassement dans l'objet XMLHttpRequest ?!

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Pense à remplacer les " par \" et les ' par \'
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Arf, non je ne pense pas, je me suis peut etre mal fait comprendre.

    Le résultat donné deux cran plus haut n'est pas ce qui est ce qui est receptionné au niveau de l'objet XMLHttpRequest, et donc directement interprété

    Donc le problème reste toujours présent.

    EDIT : Je précise aussi qu'il n'y a ni " ni ' dans aucune de mes données présentent dans la base de données.

  12. #12
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    et des retours à la ligne ? si oui, faut les remplacer par \n
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Ha ha !
    La tu as certainement mis le doigt sur ce qui cloche !

    Il me semble qu'il y a des retours à la ligne dans certaines descriptions en effet, je vais voir ca, mais comment on les remplace par '\n', ou plutot comme sont-ils identifiés dans la base de données (encodés) ?

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    J'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $desc = str_replace("\n"," ",$desc);
    dans la partie :

    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
     
    while ( $line = @mysql_fetch_array($result) ){
    					// --- Maximum d'annonce par page atteind, nouvelle page a créer
    					if ( $num_Annonce == $MAX_ANNONCE_PER_PAGE ){
    						$num_Annonce = 1;
    						$affichage .= 'journal.CreatePage();';
    						$affichage .= 'page = journal[journal.nbPage - 1];';
    					}
    					$title = removeaccents($line["title"]);
    					$address = removeaccents($line["address"]);
    					$city = removeaccents($line["city"]);
    					$desc = removeaccents($line["previewdesc"]);
    					$desc = str_replace("\n"," ",$desc);
    					$state = removeaccents($line["state"]);
    					$type = removeaccents($line["type"]);
    					$affichage .= 'page.AddAnnonce(\"'.$line["id"].'\",\"'.$title.'\",\"2006-11-01\",\"'.$line["price"].'\",\"'.$line["imageloc"].'\",\"'.$desc.'\",\"'.$address." ".$line["zip"]." ".$city." [".$state."]".'\",\"'.$type.'\");';
    				}
    				$affichage .= 'journal.DisplayPage(\"'.$LABEL_DIV_RES.'\");';
    Pensant ainsi supprimer les retours à la ligne en les remplacant juste par un espace, mais j'ai toujours la même erreur, 'Unterminated string literal"

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Merci pour vos réponse, j'ai résolu mon problème en remplacant par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $desc = str_replace( "\r", "\\", $desc );
    J'ai pour ceci lu cette page : http://www.zend.com/zend/tut/tutoria...1&anc=0&view=1

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Ok, par contre, désormais il me fait un "illegal caracter" alors que je n'ai rien changé et cela sur un résultat ne présentant pas de retour à la ligne dans la description... donc ca devrait marché comme avant, mais non, je ne comprends pas, surtout qu'il n'est pas capable d'identifier le caractère qui ne va pas :s

    EDIT : j'ai rien dit, l'erreur venait d'ailleurs... toudoudoudoudoudou..

    Merci à tous, sujet résolu !

+ 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