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] AJAX Asynchrone ne fonctionne pas


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Par défaut [AJAX] AJAX Asynchrone ne fonctionne pas
    Bonjour,

    J'ai un petit souci avec AJAX :
    Lorsque j'envoie ma requête HTTP en mode synchrone, il n'y a aucun problème. Par contre, lorsque je souhaite envoyer en mode asynchrone, le navigateur me dit :
    Les données nécessaires pour terminer l'opération ne sont pas encore disponibles

    Vu que la requête SQL que j'ai à faire est assez longue, ça nuit beaucoup à la fluidité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var xhr=getXhr();
            xhr.open("GET","../../includes/bd_action.php?act=delPlanif&addsupIdOrg=" + id_org + "&addsupPlanSeq=" + plan_seq + "&addsupDate=" + pd, false);
    		xhr.send(null);
    ==> Ca marche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var xhr=getXhr();
            xhr.open("GET","../../includes/bd_action.php?act=delPlanif&addsupIdOrg=" + id_org + "&addsupPlanSeq=" + plan_seq + "&addsupDate=" + pd, true);
    		xhr.send(null);
    ==> Les données nécessaires pour terminer l'opération ne sont pas encore disponibles

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 131
    Par défaut
    tu peut nous montrer le code qui recupere les donnees ...
    merci

  3. #3
    Membre éclairé Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Par défaut
    Je pense que tu parles du code PHP côté serveur :

    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
    if ($_GET["act"]='delPlanif') {
     
    $planDate = substr($_GET["addsupDate"],0,4) . "-" . substr($_GET["addsupDate"],4,2) . "-" . substr($_GET["addsupDate"],6,2);
    $link = pg_connect($conn_string) 
    	or die("Connexion Impossible! ");
     
    	$req = "SELECT id FROM T_p ";
    	$req .= "WHERE plan_seq =" . $_GET["addsupPlanSeq"] . " AND id_org = '" . $_GET["addsupIdOrg"] . "' ";
    	$result = pg_query($link,$req);
    	$line = pg_fetch_array($result);
    	$id_trait_org = $line[0];
     
       $sql  = "UPDATE T_p ";
       $sql .= "SET plan_status = 5, plan_histo = '' ";
       $sql .= "WHERE id_trait_org=" . $id_trait_org .";";
       $res = pg_query($link,$sql);
     
       $sql2  = "SELECT trait_nom, plan_ord_day, trait_lib, freq_type ";
       $sql2 .= "FROM T_traitements, T_trait_org, T_planif ";
       $sql2 .= "WHERE T_traitements.id_trait = T_trait_org.id_trait ";
       $sql2 .= "AND T_planif.id_trait_org = T_trait_org.id_trait_org ";
       $sql2 .= "AND T_planif.plan_seq = " . $_GET["addsupPlanSeq"] . "; ";   
       $nomPos = pg_fetch_array(pg_query($link,$sql2));
     
       $sql3  = "UPDATE T_planif ";
       $sql3 .= "SET plan_ord_day = plan_ord_day - 1 ";
       $sql3 .= "WHERE id_trait_org=" . $id_trait_org . " ";
       $sql3 .= "AND plan_ord_day > '" . $nomPos['plan_ord_day'] . "'; ";
       $res3 = pg_query($link,$sql3);
     
       echo $nomPos["trait_nom"] . "|" . $nomPos["trait_lib"] . "|" . $nomPos["freq_type"];
     
       pg_close();
    }

  4. #4
    Membre éclairé Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Par défaut
    Sinon si ca vous interesse, le script JS :

    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 f(id_org,plan_seq,plan_date,ligne) {
    if (confirm('Etes-vous sur?'))
       {   
        var mytool_array=plan_date.split("-");
    	var pd = mytool_array[0] + mytool_array[1] + mytool_array[2];		
       try {
            var xhr=getXhr();
            xhr.open("GET","../../includes/bd_action.php?act=delPlanif&addsupIdOrg=" + id_org + "&addsupPlanSeq=" + plan_seq + "&addsupDate=" + pd, true);
    		xhr.send(null);        
            if(xhr.readyState == 4 && xhr.status == 200){            
    			for (i=1;i<100;i++) {
    				param = "b" + ligne.id + "00" + i;
    				try {
    					ligneParam = document.getElementById(param);
    					document.getElementById('tableauPlanif').deleteRow(ligneParam.rowIndex);	
    				} catch (ex) {
    					break;
    				}
    			}		
    			document.getElementById('tableauPlanif').deleteRow(ligne.rowIndex);	
    			fctRefuse(xhr.responseText,plan_date,id_org,plan_seq);
    			document.getElementById('nbTraitPlanif').innerHTML = "resultat : " 
    + (document.getElementById('tableauPlanif').tBodies[1].rows.length);		
            } else {
                alert("le serveur renvoie une erreur:" + xhr.responseText);
            }
        } catch (ex) {
            alert("Action impossible: " + ex.message);
        }
       }
    }

    Merci d'avance pour votre aide

  5. #5
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    cf : http://siddh.developpez.com/articles/ajax/#LIII

    Utilise l'évenement onreadystatechange de ton objet Ajax, c'est la seule façon de faire avec l'asynchrone.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Citation Envoyé par denisC
    cf : http://siddh.developpez.com/articles/ajax/#LIII

    Utilise l'évenement onreadystatechange de ton objet Ajax, c'est la seule façon de faire avec l'asynchrone.
    +1

    Par contre, tant qu'il y aura une faute dans le tutoriel, je préfère qu'on ne le référence pas comme solution

  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 : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Je suis idiot
    Désolé de ne pas avoir vu ca plutot mais en fait, en mode asynchrone, la méthode onreadystatechange est exécutée 4 fois :
    readyState=1 'Ouvert
    readyState=2 'En cours
    readyState=3 'En récéption
    readyState=4 'Terminé

    Lorsque readyState est à 4, responseText, responseXML, status et statusText sont valides sous FF (avant pas)

    donc, tu dois changer ta validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (xhr.readyState==4) {
       if (xhr.status==200) {
         //...
       } else {
         alert("Le serveur renvoie une erreur :" xhr.statusText)
       }
    }
    Deplus si status n'est pas égal à 200, cela veut dire qu'il n'y a pas de xhr.responseText valide (404: fichier non trouvé, 500: erreur coté serveur, ...)

  8. #8
    Membre éclairé Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Par défaut
    Merci Fremy! Ca marche impeccable maintenant : plus d'erreurs dans la console.

    Un grand merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/03/2017, 18h47
  2. [AJAX] Tutoriel ajax du site ne fonctionne pas sous IE 9
    Par Super_carotte dans le forum AJAX
    Réponses: 2
    Dernier message: 20/01/2015, 10h34
  3. [AJAX] ajax et xml ne fonctionnant pas sous Firefox
    Par Phpdebut dans le forum AJAX
    Réponses: 7
    Dernier message: 03/02/2010, 12h15
  4. Réponses: 2
    Dernier message: 20/08/2008, 23h09
  5. [AJAX] AJAX+Firefox : readyState ne dépasse pas le 1
    Par TheRedLed dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2007, 13h42

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