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 :

Appeler une fonction Ajax de façon récursive ?


Sujet :

jQuery

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut Appeler une fonction Ajax de façon récursive ?
    Bonjour,

    Comme je suis nouveau en jQuery ainsi qu'en Ajax, je voudrais savoir si appeler une fonction Ajax de façon récursive est contre indiqué ou pas.
    Voici un code simplifié qui illustre le principe de base que je souhaite utiliser:
    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
    $.fn.maFonctionAjax = function(fileName, urlQuery) {
        $.ajax({
    	type: 'GET', 
    	url: 'chemin/vers/dossier/ajax/'+fileName, 
    	dataType: 'json',
    	data: urlQuery,
            //Récupère un jeux de résultats.
    	success: function(results, textStatus, jqXHR) {
    	  //Appel une fonction pour chaque résultat trouvé.
    	  $.each(results, function(i, result) { $.fn.uneFonction(result); });
    	},
    	error: function(jqXHR, textStatus, errorThrown) {
    	  //Affiche l'erreur.
    	  alert(textStatus+' maFonctionAjax: '+errorThrown);
    	}
        });
     
        return this;
      };
     
        //Liste un tableau d'objet et fait un appel Ajax pour chaque résultat.
        for(var i = 0; i < tabObjets.length; i++) {
          //Définit la requête pour l'appel Ajax.
          var urlQuery = {'param_1':tabObjets[i].param_1, 'param_2':tabObjets[i].param_2};
          $.fn.maFonctionAjax(tabObjets[i].fileName, urlQuery);
        }
    Cette façon de solliciter l'Ajax est elle correcte ou y a t-il des risques ?

    Merci d'avance pour vos conseils.

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Salut

    Ce n'est pas une transaction AJAX récursive, c'est faire X appels AJAX en même temps puisqu'ils sont asynchrones.

    Si le volume de données à transmettre par le serveur n'est pas pléthorique, je pense qu'il vaudrait mieux un seul appel au serveur et la réponse en JSON.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Sans être pléthorique il y a pas mal de requêtes MySQL qui diffèrent selon la
    situation et donc il me semble difficile de réunir tout ça en un seul appel.
    C'est pourquoi j'aimerais savoir si "faire X appels AJAX en même temps" est contre indiqué ou pas.

  4. #4
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Oui, c'est totalement contre indiqué.
    Notamment parce que les navigateurs limitent le nombre de requêtes HTTP simultanées.
    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

  5. #5
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Oui, c'est totalement contre indiqué.
    Notamment parce que les navigateurs limitent le nombre de requêtes HTTP simultanées.
    Dans ce cas quels sont les options ?
    Y a t-il dans jQuery un gestionnaire d'appel Ajax qui permettrait d'avoir une sorte de file d'attente et d’exécuter les appels les uns après les autres ?
    J'ai vu qu'il y avait une méthode when() mais je ne suis pas sûr qu'elle réponde à mon besoin.

  6. #6
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Non, comme cela t'a déjà été expliqué, la solution ne passe pas par "Comment faire plein de requêtes simultanées" mais par "Comment revoir la conception de mon appli".

    Déjà, il y a très peu de cas où une requête (je ne parle même pas de plusieurs...) est utile au chargement de la page, or c'est ce que ta boucle semble faire.
    Pour faire une analogie, lorsque tu vas faire des courses, tu sais dès que tu pars de chez toi de quoi tu as besoin, donc tu fais ta liste avant de partir, pas quand tu arrives au magasin. Pour une page Web, c'est pareil : si tu sais au niveau du traitement serveur de quoi tu as besoin pour afficher la page, fais les traitements à ce niveau.

    Ensuite, multiplier les requêtes pour une même action oblige à multiplier les allers retours inutiles vers le serveur.
    Pour reprendre l'analogie, quand tu vas faire les courses, tu ne vas pas dans un rayon (ou un magasin), acheter ce dont tu as besoin à cet endroit, rentrer chez toi déposer le tout et repartir pour le rayon (ou le magasin) suivant jusqu'à ce que tu aies fini tes courses, tu fais tout en une seule fois.

    Bref, encore une fois, il faut que tu rationalises et améliores la conception de ton appli et non que tu essayes de gérer au mieux une appli mal conçue.
    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

  7. #7
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Merci pour cette analogie très explicite.

    Toutefois, voici plus en détail comment se passe le chargement de ma page:
    • La page à charger est un formulaire d'édition (Joomla) dont certaines parties sont dynamique (ex: un bouton qui ajoute des balises input, ou des cases à cocher etc...).
    • Une fois le formulaire d'édition sauvegardé, les données renseignées dans les balises dynamiques sont stockées en base de données dans différentes tables.
    • Lorsque le formulaire d'édition est rechargé, des requêtes MySQL sont exécutée puis la partie dynamique du formulaire est recréé à partir des données récupérées.

    En supposant que je réunisse le résultat de toutes les requêtes en une seule, le JSON retourné
    par l'appel Ajax risque d'être énorme et d'avoir une structure complexe.
    Déjà, il y a très peu de cas où une requête (je ne parle même pas de plusieurs...) est utile au chargement de la page
    J'ai 5 requêtes dans 5 tables différentes qui, selon le résultat obtenu, nécessite une ou deux requêtes
    supplémentaires.

    Est ce que Ajax est la bonne solution à mon problème ou y aurait-il un autre moyen ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/02/2010, 07h34
  2. Réponses: 19
    Dernier message: 29/06/2009, 16h19
  3. [AJAX] appeler une fonction par ajax
    Par k4444a dans le forum AJAX
    Réponses: 3
    Dernier message: 18/04/2009, 21h14
  4. Appel d'une fonction template de façon explicite
    Par vanitom dans le forum Langage
    Réponses: 11
    Dernier message: 10/12/2008, 15h34
  5. [AJAX] Appeler une fonction en php via de l'Ajax
    Par skystef dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/09/2008, 11h27

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