Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    31

    Javascript Variabili Scope e Update Risultati

    Non riesco a capire come mai dichiaro una variabile in un punto iniziale della funzione, poi la funzione esegue una rimozione dei valori di una dropdownlist e reinserimento, ma il valore della dropdownlist è ancora quello vecchio e non riesco a riportarmi quello nuovo nemmeno con la variabile che ho dichiarato all'inizio.

    Posto il codice, considerando che i tre alert (visualizzano in ordine: campo_vuoto(ok), campo_nuovo(ok), campo_vecchio(NO!!).
    Codice PHP:

    $('#primary').change( function() {   
                                var 
    primary = $('#primary option:selected').text();
                                var 
    secondary_var= $('#secondary option:selected').text();
                                   $.
    ajax({
                                        
    type"POST",
                                        
    dataType"json",
                                        
    url:"index.php/pages/get_secondary/"+primary,
                                        
    success: function(secondaries){
                                                    $(
    '#secondary').show();
                                                    $(
    '#secondary').empty();
                                                    
    alert($('#secondary option:selected').text());  
                                                    $.
    each(secondaries,function(idsecondary){
                                                                            var 
    opt = $('<option />');
                                                                            
    opt.val(id);
                                                                            
    opt.text(secondary);
                                                                            $(
    '#secondary').append(opt);
                                                                        }
                                                    );
                                                    $(
    '#secondary>option:eq(0)').attr('selected'true);
                                                    
    secondary_var= $('#secondary option:selected').text(); 
                                                    
    alert($('#secondary option:selected').text());                            
                                                }
                                });
                                   
    alert($('#secondary option:selected').text());    
                                $.
    ajax({
                                    
    type"POST",
                                    
    dataType"json",
                                    
    url:"index.php/pages/get_tertiary/"+secondary_var,
                                    
    success: function(tertiaries){
                                                $(
    '#tertiary').empty();
                                                $.
    each(tertiaries,function(idtertiary){
                                                                        var 
    opt = $('<option />');
                                                                        
    opt.val(id);
                                                                        
    opt.text(tertiary);
                                                                        $(
    '#tertiary').append(opt);
                                                });                                  
                                    }
                                    });
                             }); 

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    è un problema di asincronismo, la funzione success viene richiamata quando il server ha terminato l'operazione

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    31
    Ok, grazie avevo intuito bene però nella confusione non ero andato a guardare anche perché non capivo asincrono con cosa. Grazie Mille.

    Per correttezza si aggiunge:

    Codice PHP:
     async:   false

    tra le option di $.ajax

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    è una soluzione, ma io personalmente non agirei cosi, credo sia inutile rendere sincrone le operazioni in questo caso. Ad occhio ti basta includere la seconda chiamata ajax dentro la funzione success della prima chiamata e dovresti risolvere. Tieni conto che con chiamate sincrone se l'elaboriazione del server è molto lunga il client rimarrà "bloccato" fino a che il server non termina l'operazione.

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.