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] XMLHTTPRequest Requête simultanée


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    CyberSécurité
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : CyberSécurité

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut [AJAX] XMLHTTPRequest Requête simultanée
    Bonjour,

    J'aimerais savoir s'il est possible de limiter les requêtes simultannées XHR ?
    J'ai une boucle qui lit un fichier JSON et qui envoie une requête XHR a chaque ligne (100 lignes).

    Le problème est qu'il envoi 100 requêtes en même temps et que le serveur de l'autre côté ne gére pas çà (Google)

    Le but est d'injecter 100 nouvelles entrées dans un calendrier Google via Google Calendar API.
    Dans ce cas, XHR et le fichier JSON ne concerne pas l'API de Google.

    En comparaison, Mootools gére très bien çà dans le REQUEST avec l'option LINK: CHAIN. Mais je ne peux pas l'utiliser car CORS ne gére pas les entête X-Requested-With et Mootools ne permet pas de supprimer cette entête.

    Voila merci en espérant que vous pouvez m'aider.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    as tu essayé d'envoyer la requête suivante quand la précédente à aboutie?

  3. #3
    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
    Je pense surtout que tu as essentiellement un problème de conception...
    Prévoir d'envoyer une centaine de requêtes simultanées n'est pas viable, tu devrais penser à rapatrier toutes les données en une seule fois puis faire les traitements adaptés.
    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

  4. #4
    Membre averti
    Homme Profil pro
    CyberSécurité
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : CyberSécurité

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Je pense surtout que tu as essentiellement un problème de conception...
    Prévoir d'envoyer une centaine de requêtes simultanées n'est pas viable, tu devrais penser à rapatrier toutes les données en une seule fois puis faire les traitements adaptés.
    Je pense bien mais l'api de google ne le permet pas. J'aurais bien aimer envoyé tous un JSON bien formaté...

    La solution que j'ai trouvé a été d'envoyé les requêtes, les une aprés les autres avec un setTimeout d'une seconde qui s’incrémente à chaque nouvelle connection et voila ^^

    Merci pour vos réponses

  5. #5
    Membre actif

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Par défaut
    Salut,
    Dans l'hypothèse où vos données J.S.O.N sont stockées dans un tableau, 3 Solutions sont possible
    1 - vous utilisez jQuery
    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
     
    index=-1
    function sendRequest()
    {
    //Arreter le timer
    clearTimeout(_timer);
    // incrémenter l'index
    index++
    if(_request[index]!=undefined){
    $.ajax({
    url:[votre_url]
    type:"POST",
    data:_request[index],
    success:function(data){
    //ici votre code en cas de succes
    _timer=setTimeout(function(){sendRequest();},1000);
    }
    })
    }
    }
    2 - Vous n'utilisez pas jQuery et envoyer vos requêtes en mode synchrone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function sendRequest(){
    clearTimeout(_timer)
    index++;
    if(_request[index]!=undefined){
    var xhr=new XMLHttpRequest();
    xhr.open("POST",[votre url],false);
    xhr.send(_request[index])
    if(xhr.responseText!=undefined){
    //votre code
    _timer=setTimeout(function(){sendRequest();},1000);
    }
    }
    }
    3 - Vous n'utilisez jQuery et envoyer vos requête en mode asynchrone
    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
     
    function sendRequest(){
    clearTimeout(_timer)
    index++;
    if(_request[index]!=undefined)
    {
     var ajax=new XMLHttpRequest();
     ajax.open("POST",[votre url],true);
    ajax.send(_request[index]);
    ajax.onReadyStateChange=function(){
    if(ajax.readyState==4){
    if(ajax.statut!=500&&ajax.statut!=404){
    //ici votre code
    _timer=setTimeout(function(){sendRequest();},1000);
    }
    }
    }
    }
    }
    Evidemment je part du principe qu'il faille envoyer vos donnée JSON en POST, sans quoi la requête ne peut fonctionner correctement.
    En résumer le principe est de stocker vos requête JSON dans un array en variable globale, créer un index global et d'utiliser un fonction itérative pour envoyer une à une chaque requête.

    Bonne Chance

  6. #6
    Membre averti
    Homme Profil pro
    CyberSécurité
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : CyberSécurité

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut
    waow super la réponse
    Complète ...

    Merci

Discussions similaires

  1. [AJAX] Requêtes simultanés en Ajax
    Par karastojko dans le forum AJAX
    Réponses: 0
    Dernier message: 30/04/2012, 10h59
  2. [AJAX] Requêtes simultanés AJAX
    Par MagnetiK dans le forum AJAX
    Réponses: 2
    Dernier message: 07/06/2009, 13h28
  3. [ajax] XMLHttpRequest et formulaire(<input type='file'>)
    Par Are-no dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/08/2006, 20h22
  4. [AJAX] XMLHTTPREQUEST ne se met pas à jour :-/
    Par franckarts dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/08/2006, 18h11
  5. [AJAX] XMLHttpRequest en parallèle
    Par narkhor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/07/2006, 09h57

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