Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Seuquenza di click()

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    Seuquenza di click()

    Ciao,

    ho diverse chiamate ajax innescate da eventi click:

    Codice PHP:
    $('#uno').click(function() {
       
    // ...chiamate ajax
    }

    $(
    '#due').click(function() {
       
    // ...chiamate ajax
    }

    $(
    '#tre').click(function() {
       
    // ...chiamate ajax

    Ora vorrei fare in modo che un altro pulsante richiami in sequenza le funzioni sopra, simulando il click ad ogni completamento chiamata.
    Facendo così però:

    Codice PHP:
    $('#tutti').click(function() {
      $(
    '#uno').click();
      
    setTimeout(function() { $('#due').click(); }, 1000);
      
    setTimeout(function() { $('#tre').click(); }, 1000);
    }); 
    In realtà non viene atteso il completamento della chiamata ajax bensì il successivo parte dopo il secondo messo di timeout.
    In effetti poi il successivo non parte fino al completamente del primo ma resta in uno stato di attesa.

    L'unico modo che mi viene in mente al momento è quello di andare a verificare l'evento complete della chiamata ajax, ma non saprei come fare partendo da un click.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Se ti serve che vengano chiamate in cascata puoi impostare le chiamate come sincrone, senza usare il timeout

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Sì ma con le chiamate sincrone mi rallenta di molto il funzionamento (sono una serie di importazioni da un database ad un altro, con chiamate asincrone con visualizzazione di progress bar).

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    in che senso ti rallenta? se devi chiamarle in cascata non devi cmq aspettare che sia finita la chiamata precedente?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Mi sa che ho capito male io allora. Le singole funzioni sono asincrone e devono rimanere tali.
    Tu intendi invece richiamare il l'evento click in maniera sincrona. Come si fa?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    se devono rimanere asincrone puoi fare semplicemente cosi:

    codice:
    $('#tutti').click(function() { 
      $('#uno').click(); 
      setTimeout(function() { $('#due').click(); }, 1000); 
      setTimeout(function() { $('#tre').click(); }, 2000); 
    });
    Il tuo codice non va bene perche il secondo e terzo click vengono richiamati entrami dopo 1 secondo

    oppure:

    codice:
    $('#tutti').click(function() { 
      $('#uno').click(); 
      setTimeout(function() {
         $('#due').click(); 
         setTimeout(function() { $('#tre').click(); }, 1000); 
      }, 1000); 
    });
    Mi pare ovvio che pero cosi non ti assicuri che la chiamata precedente sia terminata semplicemente aspetta un secondo per ogni chiamata

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Mi stai dicendo che non c'è modo di aspettare il completamento della precedente?

    L'unico modo che mi viene in mente è che premendo il pulsante 'tutti' richiama la prima funzione con un parametro e poi in ogni chiamata, nel 'complete', effettuo un controllo e se il flag è attivo chiamo quella successiva.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    a sto punto allora passa un parametro per indicare che in questo preciso caso la chiamate devono essere sincrone... per i click standard chiamati singolarmente invece rimarranno asincrone... non so se ti è chiaro la differenza tra sincrono/asincrono... l'unica vera differenza è che lo script prima di passare alla riga successiva del codice aspetta che la chiamata ajax sia terminata... quindi capirai che verificare l'evento complete e quindi aspettare che la chiamata sia terminata corrisponde esattamente ad effettuare una chiamata sincrona.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.