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

jQuery Discussion :

synchronicité et callback (success) en mode async


Sujet :

jQuery

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut synchronicité et callback (success) en mode async
    Salut ! Alors voila j'ai réalisé un site web ....

    Et il marche sauf qu'il est plutot lent .... en fait j'ai un probleme de synchronicité et je trouve pas comment remédier à ça

    J'ai normalement codé mon site en ajax mais je suis obligé de faire ca:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		function ajax_call(what2do, callback){
    			$.ajax({
    				type: "GET",
    				async: false,
    				dataType: "json",
    				url: "data.php?" + what2do,
    				success: function(json) {
    					callback.call(this, json);										
    				}			
    			});	
    		};
    Donc je pense qu'en fait il essaye d afficher les valeurs avant de les avoir calculé ?

    Et le fait que je le mette synchrone au lieu d asynchrone rend le site plus lent non ?

    Donc j'aimerai le mettre asynchrone mais que ca marche ..... ^^


    La pour le moment tout marche en sync.

    Ci join, je met mon fichier index et le fichier data.php.

    J espere que vous pourrez m'aider ...
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    essaye une machine a voyager dans le temps de sorte qu'il puisse obtenir une réponse avant que le serveur ne l'ait délivrée ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    je suis obligé de faire ca
    Bonjour,
    Il aurait été plus pertinent de nous dire pourquoi tu es obligé de faire ça. Décrire le problème plutôt qu'une (mauvaise) solution. Qu'as-tu en console ?

    Si c'est bien ce que je penses, il s'agit d'une erreur de codage classique. Tu exécutes un code dépendant de données asynchrones en dehors du callback de ta requête AJAX. Un peu comme ici :
    http://www.developpez.net/forums/d12...rtee-variable/

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    Merci de ta réponse Sylvain

    Pourquoi je suis obligé de faire ? Le probleme est la je ne sais pas tout ce que je sais c que si je ne le fais pas rien ne marche.

    Si je savais pourquoi je pense que oui je pourrais trouvé la solution


    Sinon je n ai pas bien compris la suite ....

    En fait oui j ai du code a coté comme on peut le voir qui va changer l adresse url suivant les données que je veux récupérer et cette adresse je la crée suivant les options définies par l utilisateur

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    A quoi te sers call() exactement dans ton code
    Parce que je doute que la valeur this transmise soit celle que tu espères...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ajax_call(what2do, callback){
    	$.ajax({
    		type: "GET",
    		dataType: "json",
    		url: "data.php?" + what2do,
    		success: function(json) {
    			callback(json);
    		}
    	});
    };
    devrait être suffisant...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    j'ai essayé de faire comme tu m as conseillé bovino mais plus rien ne marche :/

    Alors j'ai essayé en remettant le async à "False"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function ajax_call(what2do, callback){
    			$.ajax({
    				type: "GET",
    				async: false,
    				dataType: "json",
    				url: "data.php?" + what2do,
    				success: function(json) {
    					callback(json);
    				}
    			});
    		};

    Et la ca marche donc merci =)

    Mais l’exécution n'est pas plus rapide

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Il te sera de toute façon impossible de traiter des données avant qu'elles ne soient retournées, donc le temps minimal à attendre est celui que mettra le serveur a te retourner les données.
    async true ne fera pas que le serveur retournera les données plus vite, il fera juste en sorte que le reste du programme tournera sans attendre la réponse du serveur
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    Oui je suis d accord mais je pensais que bon on va dire que la ca met 1min pour afficher toutes les données ....

    mais pendant ces 1min l utilisateur ne voit rien ...

    je pensais qu'il etait possible que les graphiques, les données s affichent au fur et a mesure, qu au final oui ca prend une minute, mais que par exemple au bout de 30sec il y a la moitier des graphiques qui soient visibles et complets.


  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    En fait j'affiche mes graphs avec ca par exemple (qui est a la fin du code) en html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="pie_certification" style="width: 700px; height: 400px; margin: 10px auto"></div>

    Et le code pour les données du graph c'est ca, qui est dans le head, en javascript:
    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
     
    	if (selected_certification == "all" &&  document.forms.checkbox_show_graph.showgraph.checked == true) {	
    		var chart;
    			$(document).ready(function() {
    				chart = new Highcharts.Chart({
    					chart: {
    						renderTo: 'pie_certification',
    						plotBackgroundColor: null,		
    						plotBorderWidth: null,
    						plotShadow: false
    					},
    					title: {
    						text: 'Certification Level',
    					},
    					subtitle: {
    						text: save_country + " : " + selected_year + titre_intext + titre_reference + titre_certified,  // affiche le pays et l'année sélectionnés par l'utilisateur	
    					},
    					tooltip: {
    						formatter: function() {
    							return '<b>'+ this.point.name +'</b>: '+ this.y;
    						}
    					},
    					plotOptions: {
    						pie: {
    							allowPointSelect: true,
    							cursor: 'pointer',
    							dataLabels: {
    							formatter: function() {
    								// display only if larger than 0.5
    								return this.y > 0.5  ? this.y : null;
    							}
    						},
    							showInLegend: true
    						}
    					},
    				    series: [{
    						type: 'pie',
    						name: 'Certification',
    						data: [
    							['ACFE', return_certif[0]],
    							['ACPS', return_certif[1]],
    							['ACSE', return_certif[2]],
    							['ACSR', return_certif[3]],
    							['AQPS', return_certif[4]],							
    						]
    					}]
    				});
    			});
     
     
    	}


    Donc serait il possible de faire en sorte que la ligne html soit exécuté tout de suite apres cette fonction javascript ?

    Ca permettrait d'afficher les graphs petit a petit je pense et donc ca serait mieux pour l utilisateur

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    les données ne sont utilisables qu'a la fin de leur réception ...

    tu pourrais éventuellement décomposer ton ajax afin de faire plusieurs envois/réception et traiter les lots dès leur arrivée
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    snif

    mais pourtant mon site est en 2 parties, des données brutes et en dessous des graphs:

    http://gyazo.com/f7c980771a029aa7ef71bf315cef2012

    Et les données brutes quand j applique un filtre, s affiche au fur et a mesure, mais les graphs eux ils s affichent tous d un coup ... tout simplement parce que le code html pour les afficher est tout a la fin je pense ....

    Pour les données brutes j ai quelque chose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		
    var tab_intext = ["internal", "external"];
    		data_intext = new Array();
    		for(var j=0;j<tab_intext.length;j++){
    			url = "type_data=Int_Ext&type_areaOUcountry=" + save_type_country + "&nom_data=" + tab_intext[j] + "&year=" + selected_year + "&month=all&areaOUcountry=" + save_country  + "&reference=" + selected_reference + "&certification=" + selected_certification + "&trie_intext=" + selected_intext + "&certified=" + selected_certified;			
    			ajax_call (url, function(json){
    				$('#id' + tab_intext[j] + 'data').html(json['ladata']);
    				data_intext[j] = json['ladata'];			 
    			}); 
    		}
    C'est pas possible de faire quelque chose de similaire pour les graphs d apres vous ?

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    comme sus dit en récupérant les données par lot et en les traitant pas lots.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    Mais la j ai pas tout compris ... ^^

    En gros j aurais pas qu'une fonction "ajax_call" ?

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Non tu devras aller chercher tes données par paquets ...
    scinder ton envoi ajax en plusieurs
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    ha tu veux dire quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print json_encode($resultat);
    dans mon fichier data.php ?

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    arranges toi que ta page php retourne une première partie des infos et relance un ajax pour la suite dans le success...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut

  18. #18
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ben un peu comme si tu faisais une pagination en lançant d'affilée plusieurs ajax ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    faut comprendre que moi je suis en alternance, que j ai jamais eu de cours de programmation web, que j ai jamais eu quelqu un pour m expliquer et que c mon premier site ^^

    donc bon ....

  20. #20
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ben justement...

    je dis juste qu'au lieu de recupérer ton gros json en une seule fois tu peux imaginer de le récupérer en plusieurs ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Async et attente traitement du callback
    Par loudo dans le forum NodeJS
    Réponses: 1
    Dernier message: 19/03/2015, 12h47
  2. Store.load, callback et success=false
    Par Bruno13 dans le forum Ext JS / Sencha
    Réponses: 12
    Dernier message: 07/11/2014, 17h12
  3. callback:function(records, operation, success)
    Par solo190 dans le forum Ext JS / Sencha
    Réponses: 16
    Dernier message: 07/10/2014, 18h19
  4. [AJAX] jQuery $.post() en mode async ?
    Par Ennicolem dans le forum jQuery
    Réponses: 0
    Dernier message: 31/05/2013, 14h38
  5. [Débutant] Callback Contract avec un service WCF en single mode
    Par Seth77 dans le forum Windows Communication Foundation
    Réponses: 7
    Dernier message: 24/05/2012, 23h25

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