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

AJAX Discussion :

[AJAX] Mon script php ne s'execute pas tout le temps


Sujet :

AJAX

  1. #1
    Membre du Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 49
    Points
    49
    Par défaut [AJAX] Mon script php ne s'execute pas tout le temps
    Bonjour

    Je commence tout juste l'AJAX et je rencontre un problème pour mon tout premier essaie.

    Je dispose de 4 fichiers:
    - test.php qui appel ma fonction javascript me permettant d'accéder à mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <!--du html-->
    <body>
    <script language="javascript">
    callScript("page.php","mot=blbla");
    alert ("1"); // juste pour vérifier quand j'ai fini
    </script>
    <?php
     // juste pour faire jolie ou en cas de besoin, il y a rien de php dans cette page mis à part des commentaires
    ?>
    <!--encore du html-->
    Dans un autre fichier, il y a ma fonction callScript() que j'ai récupérer dans un tuto sur le net :
    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
    function callScript ( scriptName, args ){
     
    	var xhr_object = null; 
     
    	// Construction de l’objet XMLHttpRequest selon le type de navigateur
    	if(window.XMLHttpRequest) 
    	   	xhr_object = new XMLHttpRequest(); 
    	else if(window.ActiveXObject)
    	  	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", scriptName, true);
     
    	//  Définition du comportement à adopter sur le changement d’état de l’objet XMLHttpRequest
    	xhr_object.onreadystatechange = function() { 
    	  	 if(xhr_object.readyState == 4) {
    			//alert(xhr_object.responseText); // DEBUG MODE
    			//document.write(xhr_object.responseText);
    			eval(xhr_object.responseText);
    		 }
    		return xhr_object.readyState;
    	} 
    	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	alert("2");// encore pour vérifier ou je suis
    	//  Envoi de la requête
    	xhr_object.send(args);
    }
    Ensuite il y a page.php qui devrait normalement être exécuté. Ce script est la pour s'assurer que le mot entrer en paramètre existe bien pour cela il utilise une fonction présent sur le 4ème fichier. Cette fonction renvoie true si le mot existe et false s'il n'existe pas.

    Mon problème vient du fait que mon script page.php ne s'exécute que quand le mot entré en paramètre est correcte dans le cas contraire il ne se passe presque rien : j'ai les 2 alert de test.php et de ma fonction qui s'exécute et c'est tout.

    Voici ce que contient ma page.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
    <?php
            echo "alert('3');"; // Encore une vérification qui ne s'affiche pas quand mon mot est incorrecte
    	// include
    	include "fonction.php"; // contient ma fonction qui renvoie true ou false
    	include "fonction2.php"; // fonction vérifiant plusieurs élément de sécurité
     
    	// Récupération du mot
    	$mot=injection($_POST['mot']); //injection est une fonction présente dans fonction2.php
     
    	// Vérification que le mot est correcte 
    	if(verifmotexiste($mot)){
    		echo "alert('Le mot que vous avez choisi existe');";
    	}
    	else{
    		echo "alert('Le mot que vous avez choisi n'existe pas');";
    	}
    ?>
    Pour tester, j'ai appeler directement ce script dans mon navigateur en changeant quelques éléments :
    - ma variable $mot prend comme valeur un texte taper directement dans le script
    - en mettant dans mes echo uniquement le contenu de mes alert.
    Avec cet essai, j'ai bien un de mes deux messages qui s'affiche selon si mon mot existe ou pas.

    Du coup, je ne sais pas d'où peut venir mon erreur. Es-ce que vous avez une idée ?

    Merci d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    à mon avis il doit s'agir d'un problème de cache...

    Essaie de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr_object.open("POST", scriptName, true);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr_object.open("POST", scriptName+"?rnd="+Math.random(), true);
    ce qui éliminera tout problème de cache

  3. #3
    Membre du Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Merci pour ton aide mais en rajoutant ce que tu me donne, le problème reste le même. C'est vraiment quand le mot n'existe pas dans la base de donnée que ce pose le problème. Ce que je ne comprend pas si le problème vient de ma fonction verifmotexiste(), il aurait du tout de même faire le alert("3");

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    ça tu devrais éviter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return xhr_object.readyState;
    Et tu devrais aussi tester le status==200 en plus du readyState.

    Pour les problèmes de cache, +1 pour supersnail.
    Mais plus généralement, cf. la FAQ

    Quant à ton erreur, je pense que tous tes appels fonctionnent, ainsi que la réception des réponses.

    Le seul problème semble être ton message dans le cas où le mot n'existe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "alert('Le mot que vous avez choisi n'existe pas');";


    A+

  5. #5
    Membre du Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    arg merci ça venait de la.
    J'ai aussi fait les modification que vous m'avez donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    xhr_object.onreadystatechange = function() { 
    	  	if(xhr_object.readyState == 4) {
    			if(xhr_object.status == 200){
    				eval(xhr_object.responseText);
    			}
    		 }
    }
    Merci à tous de votre aide.

    Par contre j'ai vraiment du mal avec AJAX : J'ai rajouté une variable existe dans ma page.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Vérification que le mot est correcte 
    //echo "var existe";
    if(verifmotexiste($mot)){
    	echo "alert('Le mot que vous avez choisi existe');";
    	echo "existe='existe'";
    }
    else{
    	echo "alert('Le mot que vous avez choisi n\'existe pas');";
    	echo "existe='existe pas'";
    }
    Avec le echo "var existe"; je n'ai aucun des deux messages alert mais si j'enlève cette ligne, déjà ça fonctionne mais je n'arrive pas à accéder à ma variable existe.

    Si j'ai bien compris, je dois mettre mon traitement correspond à la fin de l'exécution du script php dans xhr_object.onreadystatechange et à l'intérieur des if. Le truc c'est que ma fonction callScript, je vais l'exécuter pour plusieurs script et pas seulement celui la. Ah moins que ce ne soit pas du tout un problème et que je n'ai pas bien compris son utilisation.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Pour ta variable : n'oublie pas les ";" en fin d'instruction.
    N'oublie pas qu'Ajax renvoie une simple chaîne de caractères (et non un code indenté).
    Pour l'instant tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval("existe='existe'alert('Le mot que vous avez choisi n\'existe pas');.....");
    A+

  7. #7
    Membre du Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    J'ai modifié, merci.

    Es ce que je suis obligé d'avoir cette variable comme étant global pour pouvoir l'utiliser à l'emplacement ou j'ai appelé ma fonction callScript ?

    De plus, lorsque j'appellerais ma fonction callScript() de son emplacement final, elle devra s'exécuter et je devrais attendre la fin de son exécution pour continuer. Hors mon script coté client continue de s'exécuter par défaut, es ce qu'il existe un moyen de l'arrêter pour qu'il attende la fin de l'exécution de ma requête ?

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Lilouse Voir le message
    es ce qu'il existe un moyen de l'arrêter pour qu'il attende la fin de l'exécution de ma requête ?
    Oui : il faut que tu fasses ton appel Ajax en mode synchrone (dernier paramètre du open() = false).

    Par contre, le traitement de la réponse se fait différemment (pas de onreadystatechange). Tu trouveras des exemples dans les tutos

    A+

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Lilouse Voir le message
    Es ce que je suis obligé d'avoir cette variable comme étant global pour pouvoir l'utiliser à l'emplacement ou j'ai appelé ma fonction callScript ?
    Je ne sais pas ce que tu appelles "emplacement", mais oui, elle doit être globale si tu veux l'utiliser partout dans ta page sans avoir à la passer en paramètre des fonctions.
    Par contre, tu devrais appeler callScript() sur onload du body ...

    A+

  10. #10
    Membre du Club
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup. Quand je parlais d'emplacement je voulais parler du fichier dans lequel je me trouvais.

    Pour ce qui est de faire un appel dans le body, ça ne va pas être possible. Dans le cas que je représente ici, oui bien sur, c'est peut être mieux mais je n'ai réalisé ceci que pour préparer mes fonctions callScript() pour la javascript et mon script php. Dans mon application, le mot que je souhaite vérifié est écrit dans un formulaire avec une lettre par case. Lorsque je valide mon mot, j'ai une fonction javascript qui est exécuté, qui reconstitue le mot notamment mon mot et je préparais tout ceci afin de vérifier si mon mot existe ou pas. La suite de ma fonction dépendant de l'existence du mot :
    - dans un cas le message d'erreur que j'avais mis ici directement dans ma requete (Le mot n'existe pas).
    - dans l'autre l'exécution de la suite de la fonction.

    Grâce à ton aide, je vais pouvoir avancer. Merci beaucoup.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    OK.
    Je n'ai pas bien compris la description mais je te fais confiance

    La seule chose à savoir, c'est que, lancée ainsi, il ne faut pas que la fonction ait besoin d'accéder à un élément de la page (il n'existera pas encore, ou le résultat sera aléatoire) ...

    A+

Discussions similaires

  1. Un script qui ne s'appelle pas tout le temps
    Par omar24 dans le forum jQuery
    Réponses: 5
    Dernier message: 21/04/2011, 10h51
  2. [AJAX] Mettre l'ajax sur mon script php
    Par pierrehs dans le forum AJAX
    Réponses: 3
    Dernier message: 03/11/2010, 15h50
  3. [MySQL] script php ne s'execute pas
    Par vladimire dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/10/2009, 14h47
  4. Réponses: 4
    Dernier message: 24/12/2008, 11h10
  5. Page de login -- script PHP qui ne marche pas
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/04/2006, 16h32

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