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

WebDev Discussion :

Problème avec AJAXExécuteAsynchrone


Sujet :

WebDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 29
    Par défaut Problème avec AJAXExécuteAsynchrone
    Bonjour,

    Cela fait une semaine que je suis sur code et je devient FOU.

    J'ai une page où mes utilisateurs peuvent envoyer un fichier excel dans une base de donnée...

    J'invite ce dernier à chercher le dit fichier via un champs de saisie de type upload.

    puis dans mon code serveur je récupère le fichier grâce à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp est une chaîne = Upload..ValeurAffichée
    devant le temps que met la page, j'ai décidé de mettre en place une barre de chargement qui ce trouve dans une cellule.

    Quand j'exécute le code, la barre ce charge normalement. Mais Upload..ValeurAffichée ne me retourne rien !!!

    comment faire pour récupérer les données ???


    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
    //Mon bouton code navigateur
    CelluleAfficheDialogue(Cellule1)
    JaugeActive(Jauge1,1)
    AJAXExécuteAsynchrone(TraitementServeurLong,MAJ_Jauge)
     
    //
    PROCEDURE TraitementServeurLong()
    nMaxBoucle est un entier=612
    //ExécuteTraitement(Upload)
     
    temp est une chaîne = Upload..ValeurAffichée
     
    POUR nIndice=1 _A_ nMaxBoucle
    	// mise à jour de la valeur de la jauge 
    	// la borne max de la jauge indiquée dans le champ étant 100, on affecte à la jauge le % de traitement effectué
    	Jauge1=nIndice/nMaxBoucle*100
     
     
    	// traitement à proprement dit
    	// ....
    	// pour l'exemple une temporisation de 1 seconde
    	Multitâche(1)
    	//info("ee")
    FIN
     
    //
    PROCEDURE MAJ_Jauge(val)
    // Traitement optionnel permettant de lancer un traitement serveur
    //Info(val)
     
    //BoutonFermeBarre..Visible = Vrai
    Info("fin")
    CelluleFermeDialogue(Cellule1)
    merci pour votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Non tu n'es pas fou, il faut juste comprendre la philosophie de l'ajax programmé et le fait que dans ce cas, la procédure serveur n'a plus la main sur la fenêtre. Ce sont les procédures navigateur qui devront faire le boulot.

    Voir le schema tres explicite ici :
    http://doc.pcsoft.fr/fr-FR/?3055103&...8E&verdisp=160

    Je recommande d'ailleurs le stage pcsoft webdev avancé qui aborde ces sujets.

    Il faut donc l'imaginer comme deux dispositifs s'echangeant des informations, et le serveur n'ayant pas la main sur la fenetre car sur le poste client.

    Fais egalement attention que la procedure navigateur indiquée en parametre de la fonction ajacexecuteasynchrone n'est appelee qu'a la fin de la procedure serveur.

    Dans ton cas, il faut donc, a mon avis :
    1.inclure l'ecriture d'un compteur global serveur dans la boucle de ta procedure serveur
    2. Creer une autre procedure serveur et un autre appel ajaxexecute avec un timer pour
    aller lire le compteur sur le serveur, et rafraichir la jauge a l'aide d'une procedure navigateur.

    Fais egalement attention que ta procedure serveur doit finir a tous les coups et qu'elle n'a pas de boucle infinie. D'ailleurs j'ai une demande en cours au support technique pour savoir comment 'killer' une procedure qui prendrait trop de temps, etant lancee en ajax asynchrone.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 29
    Par défaut
    bonjour courdi95,

    Merci de ta réponse, je croyais avoir compris le fonctionnement d'ajax...

    heu tu aurais un exemple de ta solution ? surtout pour le second point ?
    Je sais, je suis chiant. Il faut juste que je puisse lire les champs de la pages...

  4. #4
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Déjà, tu peux voter avec un pouce levé pour ma réponse ....

    Pour l'exemple, désolé, je n'ai pas d'exemple tout fait, mais typiquement :

    - procédure serveur lourde
    dans la boucle tu écris dans une variable globale du type gnCompteur
    tu fais en sorte de sortir proprement et de renvoyer les resultats dans une chaine ...

    - procédure navigateur appelant la procédure serveur
    ajaxexecuteasysnchrone (<procedure serveur>,<procédure navigateur finale>)

    - procédure navigateur finale
    tu lis la chaine renvoyée et tu l'exploites pour mettre à jour la page dans le navigateur

    Et maintenant pour la jauge de progression :

    - tu créés un timer appelant une procédure navigateur jauge
    - procédure navigateur jauge
    tu fais un appel ajax direct, mais pas asynchrone, d'une procédure serveur
    en retour tu utilises l'info pour mettre à jour ton champ jauge
    - procédure serveur jauge
    tu consultes la valeur de gnCompteur que tu renvoies ...

    Il faut donc bien prendre en compte d'un côté, des procédures serveurs, et de l'autre, des procédures navigateur, les deux étant indépendantes, avec la mise à jour des champs de la fenêtre possibles UNIQUEMENT par les procédures navigateurs. Le truc est d'échanger les infos entre le serveur et le navigateur à l'aide des appels ajax soit synchrone, soit asynchrone.

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 29
    Par défaut
    arfff mon problème reste entier.

    dans ma procédure serveur appelé par ajaxexecuteasysnchrone, le champ de saisie upload reste désespérément vide...

    je n'arrive pas à lui dire d'exécuter le code APRES l'upload... car j'ai besoin de lire ce fichier.

    et quand je coupe l'ajax, ça marche... mais plus la barre

  6. #6
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Tu peux passer un paramètre :
    <Résultat> = AJAXExécuteAsynchrone(<Procédure serveur> , <Procédure navigateur> [, <Paramètre 1> [, <Paramètre 2> [, ...]]])

    qui serait la recopie de la valeur du champ ....

    AJAXExécuteAsynchrone(TraitementServeurLong, <Procédure navigateur à créer pour récupérer les données du traitement serveur long> , Upload..Valeur)

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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