Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Ajax] Post multipli e ritorno dati

    Ciao,
    con jquery devo eseguire via ajax (post) più chiamate simultaneamente (o quasi).
    Le chiamate sono indipendenti perchè dipendono da flags in un form (se "a" è flaggato eseguo "Chiamata A", se "b" è flaggato eseguo "Chiamata B", quindi possono dover partire una, l'altra o entrambe).
    Come faccio ad eseguirle entrambe senza doverle mettere in coda ?
    E, soprattutto, come faccio a sapere quando entrambe hanno eseguito il loro compito ?
    Utilizzo sempre la solita sintassi jquery:
    codice:
    $.post("chiamataA.php",$("#formA").serialize(),
    function(responseText)
    {});
    $.post("chiamataB.php",$("#formB").serialize(),
    function(responseText)
    {});
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, le chiamata non andranno in coda.. verranno semplicemente eseguite quando richiamate, la sequenza se mai sarà determinata da quando parte una o l'altra (poi una potrebbe finire prima a seconda della pesantezza o meno).

    Per capire quando terminata io di solito uso

    $.ajax({
    url: 'ajax/test.html',
    success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
    }
    });
    che e' strutturata diversamente con diverese opzioni http://api.jquery.com/jQuery.ajax/
    il succes e' la fine e quello che ritorna lo script chiamato(se deve tornare qualcosa)

  3. #3
    Grazie, ma in realtà non ho capito:
    la sintassi di post, get o load è derivata da quella di ajax in jquery, quindi poco dovrebbe cambiare tra la mia e la tua, in ogni caso fai comunque una chiamata alla volta...
    Capita a volte di poterle accodare (esegui una chiamata nella callback dell'altra),
    ma mel mio caso particolare non trovo altre soluzioni se non farle "parallele" e di conseguenza la loro stessa "callback" non mi è sufficiente per definire quando ritornano i dati e le chiamate si possono ritenere complete.
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    pero' se sai quante ne fai partire il callback delle chiamate, sempre la stessa funzione definita esternamente, puo' contare quante volte viene eseguito il callback
    primitivo ma...

    altrimenti vedi se jquery 1.7 ha introdotto qualche strumento piu' adatto allo scopo, per quanto riguarda le chiamata asincrone ci sono parecchie novita'

    ciao

  5. #5
    Originariamente inviato da Xinod
    pero' se sai quante ne fai partire il callback delle chiamate, sempre la stessa funzione definita esternamente, puo' contare quante volte viene eseguito il callback
    primitivo ma...
    Come ? Cosa intendi per callback "primitivo" ?

    Originariamente inviato da Xinod
    altrimenti vedi se jquery 1.7 ha introdotto qualche strumento piu' adatto allo scopo, per quanto riguarda le chiamata asincrone ci sono parecchie novita'
    Hai un link per favore o mi basta gugolare "chiamate asincrone" per jquery ?
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    @xinod, ci sono i deferred da jquery 1.5

    considerando che a priori non sappiamo quante siano le chiamate ajax possiamo pushare in un array le promesse ritornate dai metodi ajax e poi usare $.when sull'array stesso :
    il codice potrebbe essere qualcosa del tipo

    codice:
    var calls = [];
    
    calls.push($.post("chiamataA.php", $("#formA").serialize(),
        function(responseText) {
        }
    ));
    
    
    calls.push($.post("chiamataB.php",$("#formB").serialize(),
       function(responseText) {
       }
    ));
    
    
    $.when.apply(null, calls).done(function() { alert ('finito') });

    è un approccio che ho usato anche per questa pagina (vedi riga 606 e precedenti del sorgente) con la sola differenza che lì le chiamate ajax sono elencate esplicitamente (sono sempre due)

    @rasega: vai sul sito di jquery e leggi la documentazione sui deferred objects
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Fico, non ne conoscevo l'esistenza, grazie !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    appunto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.