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

    Select multiple in ajax

    Salve, ho un piccolo codice javascript che carica una sequenza di 3 select alla modifica delle precedenti.
    I dati sono presi dal database mysql.

    es:

    select tipo -> select marca -> select modello

    al caricamento carico tipo e marca dal database direttamente con php, modello è vuoto

    se modifico tipo, aggiorno marca.
    se modifico marca, carico modello.

    e fin qui tutto bene.

    io però vorrei che se cambio nuovamente tipo, deve aggiornare marca ed azzerare modello.

    le funzioni per farlo sono se stesse per caricare i dati, e se all'evento onchange di tipo le richiamo singolarmente funzionano correttamente, se invece le richiamo entrambe la prima ad essere chiamata, non funziona mai!

    ecco le funzioni:

    codice:
    function wsLoadMake(tb1, id1){
       xmlHttp.open('GET', 'includes/ws_ajax_model.php?field='+tb1+'&filter='+id1, true);
       xmlHttp.onreadystatechange = stateChanged;
       xmlHttp.send(null);
    }
    
    function wsLoadModel(tb2, id2, id3){
    
       id3 = typeof(id3) != 'undefined' ? id3 : '';
    
       xmlHttp.open('GET', 'includes/ws_ajax_model.php?field='+tb2+'&filter='+id2+'&filter2='+id3, true);
       xmlHttp.onreadystatechange = stateChanged;
       xmlHttp.send(null);
    }
    Le richiamo cosi, la prima non funziona, se inverto wsloadmake con wsloadmodel, è in ogni caso la prima a non funzionare:
    codice:
    <select name="category" id="category" onchange="wsLoadMake('make', getSelected(this)); wsLoadModel('model', '');">
    NB, se le richiamo cosi, funzionano correttamente entrambe, ma ovviamente una sola alla volta:

    codice:
    <select name="category" id="category" onchange="wsLoadMake('make', getSelected(this));" >
    <select name="category" id="category" onchange="wsLoadModel('model', '');" >
    C'è un modo per poterle richiamare entrambe?

    Grazie mille!
    Ciao!

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Fai chiamate a cascata
    codice:
    function wsLoadMake(tb1, id1){
       chiamata ajax.....
       al responseText mosto la select marca e lancio la seconda chiamata
    
    function wsLoadModel(tb2, id2, id3){
    
       idem come marca...
    }
    }
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Originariamente inviato da cavicchiandrea
    Fai chiamate a cascata
    codice:
    function wsLoadMake(tb1, id1){
       chiamata ajax.....
       al responseText mosto la select marca e lancio la seconda chiamata
    
    function wsLoadModel(tb2, id2, id3){
    
       idem come marca...
    }
    }
    e se devo chiamare solo la seconda?
    modificando la select marca?

    come faccio?
    Ciao!

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Originariamente inviato da fmortara
    e se devo chiamare solo la seconda?
    modificando la select marca?

    come faccio?
    Ok, ho frainteso come non detto pensavo fosse marca > modello invece tu hai esigenze.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    No, in effetti è tipo > marca > modello

    ma se cambio tipo, devo ovviamente svuotare sia marca che modello.

    Ho risolto creando una funzione ad hoc che svuota modello e la richiamo dentro quella che popola marca...

    Grazie e ciaooo!
    Ciao!

  6. #6
    Ho lo stesso problema di allora...


    ho due funzioni

    a();
    b();


    che devo chiamare all'onchange di una select.

    se le chiamo una alla volta, ok.
    se le chiamo insieme con onchange="a();b();" la prima non funziona mai, anche se le inverto.

    ho creato una funzione c();

    c(val)
    {
    a(val);
    b(val);
    }


    anche in questo caso, la seconda non va mai.




    ecco le funzioni:

    codice:
    function wsLoadMake(tb1, id1){
    	xmlHttp.open('GET', 'includes/ws_ajax_model.php?field='+tb1+'&filter='+id1, true);
    	xmlHttp.onreadystatechange = stateChanged;
    	xmlHttp.send(null);
    
    	clear('model');
    	wsSetRequiredMakeLabel(id1);
    }
    
    function wsLoadModel(tb2, id2, id3){
    
    	id3 = typeof(id3) != 'undefined' ? id3 : '';
    
    	xmlHttp.open('GET', 'includes/ws_ajax_model.php?field='+tb2+'&filter='+id2+'&filter2='+id3, true);
    	xmlHttp.onreadystatechange = stateChanged;
    	xmlHttp.send(null);
    	
    }
    
    function  wsLoadUpdated(val)
    {
    	wsLoadICon('item_condition', val, '');
    	wsLoadModel('model', val, '');
    	
    	wsSetRequiredModelLabel(id2);
    }
    Ciao!

  7. #7
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Ogni funzione che ne fa uso deve avere una diversa istanza di XMLHttpRequest. Devi rendere xmlHttp una variabile del localscope, altrimenti la seconda sovrascriverà la prima. In pratica ogni funzione deve cominciare con

    codice:
    var xmlHttp = new XMLHttpRequest();

  8. #8
    Grazie... proverò per vedere se è quello

    intanto io ho risolto in altro modo.

    In pratica è bastato sostituire al true un false alla fine della chiamata alla pagina inclusa.

    questo perché ho messo degli alert che mi facevano vedere come la pagina veniva correttamente richiamata, ma restituiva dei valori errati.

    gli status non erano mai 4 ma sempre 2 o 3 e mancavano quindi i dati. adesso il risultato viene mostrato solo quando lo status è 4. credo che questo estragga i dati e li mostri solo quando il loading è completato. o sbaglio?

    questo
    codice:
    xmlHttp.open('GET', 'includes/ws_ajax_model.php?field='+tb1+'&filter='+id1, true);
    è diventato questo:
    codice:
    xmlHttp.open('GET', 'includes/ws_ajax_model.php?field='+tb1+'&filter='+id1, false);
    ora funziona.
    Ciao!

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.