Visualizzazione dei risultati da 1 a 5 su 5

Discussione: trigger - callback

  1. #1
    Utente di HTML.it L'avatar di Azucchi
    Registrato dal
    Jul 2014
    Messaggi
    123

    trigger - callback

    Buonasera
    Ho una funzione Ajax a seguito della quale devo eseguire un trigger che si occupa di far scattare una funzione ajax che ha il compito di aggiornare il valore in un menu'.
    codice:
    $.ajax ({
    
    
    		type: "POST",
              	url: "recoveryid.php",
               	data: 'id=' + id + '&exid=' + exid,
               	success: function(data)	{
                                            $('.test').trigger("change");   //TRIGGER
    
                                           //RECUPERA VALORE MENU' GENERATO (a)
                    });
    
    $('body').on('change', '.test', function(){
      								$.ajax({
      									      type: "POST",
              								      url: 'populate_menu.php',
               								      data: 'idmenu1=' + idmenu1 + '&idmenu2=' + idmenu2, 
               								      success: function(data)
               									{
                 																					 															//popola menu'			
               									}
             		 					});
    });
    Trattandosi di un metodo asincrono (async: true) quello che si occupa di popolare il menu', c'e' la possibilità che il metodo che si occupa di recuperare il valore dal menu (a) sia svolto prima che il menu' sia popolato, generando quindi incongruenza nei dati.
    Dalla versione 1.8 di jquery, async: false mi pare di aver capito che sia deprecato. Volevo sapere in quale altro modo potrei garantire la sequenza corretta delle operazioni. Ho provato ad implementare la funzione di callback, ma con risultati non soddisfacenti. Spero possiate aiutarmi a trovare una strada Vi ringrazio.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    Vediamo la pagina online d'esempio operazioni complesse con solo stralci di codice è molto difficile fare ipotesi. Monitorizzi il processo con firebug?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di Azucchi
    Registrato dal
    Jul 2014
    Messaggi
    123
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Vediamo la pagina online d'esempio operazioni complesse con solo stralci di codice è molto difficile fare ipotesi. Monitorizzi il processo con firebug?
    Non ho una pagina online, sto lavorando con un server locale. Non monitorizzo con firebug (sono andato a vedere cosa fosse :P Non sono a questi livelli, sono principiante ehehhe).
    Alla fine il dubbio principale è se async: false si può sempre evitare.
    Dal manuale:
    codice:
    As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
    In breve lo schema è questo:
    codice:
    $.ajax ({
    
                success: function (data) {
    
                             scope.parents('.div').find(".menu1").val(data);
                             scope.parents('.div').find(".menu2").val(data);
          
                             $('.test').trigger("change"); /*trigger - simula il cambiamento di stato dei due menu'. Provoca una funzione ajax asincrona (1) che a partire dai valori dei due menu' precedenti genera il terzo menu'*/
    
                             var x = scope.parents('.div').find(".menu3").val();
                             alert (x); //Esegue l'alert prima che il terzo menù sia generato perché il metodo ajax (1) è asincrono.
    
            
    }
    
    });
    Ho bisogno che il trigger e la funzione ajax ad esso collegata vengano eseguiti prima del recupero del valore del terzo menù e dell'alert.
    Ultima modifica di Azucchi; 20-08-2014 a 00:13

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    Io non voglio convincerti ma secondo me con questo approccio farai poca strada.
    A) quando uno è principiante fa operazioni da principiante non complesse
    B) a meno che non sia un progetto che resterà sempre in locale avere un sito anche solo di prova è molto consigliato
    C) è ridondante chiamare un trigger che lancia una funzione Ajax, lancia direttamente la funzione Ajax
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it L'avatar di Azucchi
    Registrato dal
    Jul 2014
    Messaggi
    123
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Io non voglio convincerti ma secondo me con questo approccio farai poca strada.
    A) quando uno è principiante fa operazioni da principiante non complesse
    Non lo reputo complesso. Probabilmente vi sono casi di gran lunga più complessi. E' difficile spiegarsi per iscritto :P
    B) a meno che non sia un progetto che resterà sempre in locale avere un sito anche solo di prova è molto consigliato
    E' un caso di studio, un prototipo. Basterebbe che funzioni in locale.
    C) è ridondante chiamare un trigger che lancia una funzione Ajax, lancia direttamente la funzione Ajax
    Il trigger non lancia direttamente la funzione Ajax, ma un evento che lancia una funzione Ajax.
    codice:
    $('body').on('change','.test',function(){
                                    $.ajax({
                                              type:"POST",
                                                  url:'populate_menu.php',
                                                  data:'idmenu1='+ idmenu1 +'&idmenu2='+ idmenu2, 
                                                  success:function(data)
                                                {
                                                                                                                                                                //popola menu'          
                                                }
                                        });
    });
    La riscrivo con l'intento di lanciarla al success della funzione Ajax precedente. A sua volta prendo il valore del terzo menu' al success della funzione Ajax di sopra. Cosi' non dovrei andare di sincronizzazione.
    Ultima modifica di Azucchi; 20-08-2014 a 09:50

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.