Eseguire funzione dopo il response di una chiamata ajax

di il
5 risposte

Eseguire funzione dopo il response di una chiamata ajax

Salve ho queste funzioni 

//###############################################
    // Gestione campi multipli
    //###############################################


    var max_fields      = 100; //maximum input boxes allowed
    var wrapper         = $("#contenitore_dati"); //Fields wrapper
    var add_button      = $(".aggiungi_macchina"); //Add button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        
        //console.log('aggiunto');
        
        e.preventDefault();
        
        if(x < max_fields){ //max input box allowed


            if(check_client()){


                x++; //text box increment
                $(wrapper).append('<div>    <div class="row">'+
                    '<div class="col-md-6">'+
                       '<label class="col-md-12 col-xs-12 control-label">Seriale*</label>'+
                       '<div class="col-md-12 col-xs-12">'+
                     '<input  type="text"  value=""  required="required"   class="form-control seriali" name="seriale[]"   >'+
                       '</div>'+
                    '</div>'+


                    '<!-- FINE seriale -->'+


                    '<!-- INIZIO codice_macchina -->'+

                    '<div class="col-md-6">'+
                       '<label class="col-md-12 col-xs-12 control-label">Codice Macchina</label>'+
                       '<div class="col-md-12 col-xs-12">'+
                     '<input  type="text"  value=""  id=""  class="form-control codici_macchina" name="codice_macchina[]" minlength="6"  maxlength="16"  >'+
                       '</div>'+
                    '</div>'+

                    '<!-- FINE codice_macchina -->'+
                 


                    '</div>'+

                    '<hr style="color:white"><a href="#" class="remove_field">Remove</a></div>'
                ); //add input box




            }


        }
    });

    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })



    //###############################################
    // Fine Gestione campi multipli
    //###############################################

    //###############################################
    // Validazione client
    //###############################################

    function check_client(){

        var errori_ajax=[];

        $(".seriali").each(function(i){

            var seriale   = $(this).val();
            
            //errori_ajax =controllo_seriale_ajax(seriale); 
            $.when(controllo_seriale_ajax(seriale)).done(function (errori_ser) {
               // the code is executed when all requests resolve.
              // a1, a2, a3 and a4 are lists of length 3 that contains the response text,
              // status and jqXHR object for each four ajax call.

                console.log(errori_ser);

                if (seriale=='') {

                    alert('Seriale Vuoto');

                    controllo =false;

                }else if( seriale.length<7 || seriale.length>8){

                    alert('Seriale deve essere lungo tra 7 e 8 caratteri');

                    controllo =false;
                
                }else if(  errori_ajax['error']){

                    controllo =false;

                }else{

                    controllo =true;
                } 

                return controllo;     
            });
      

        });



        

        //console.log(errori_ajax);

    }

    //###############################################
    // fine vALIDAZIONE client
    //###############################################


    //###############################################
    // vALIDAZIONE aJAX
    //###############################################

     function controllo_seriale_ajax(seriale){
        //event.preventDefault();

        var result=[] ;

        $.ajax({

               url:"/user_Macchina/controlliInserimentoMultiplo",
               method:"POST",
               data:{
                        seriale:seriale,
               },
               dataType:"json",
               success:function(msg)
               {
                    console.log(msg);

                    if(msg.error)
                    {
                        result['error'] = true;
                        result['errori'] =msg.errori;
                          
                        alert(result['errori']);

                    }else{

                        result['error'] = false;
                    }


                    
                    return result;

 
               },error:function(data){


                    alert ('Chiamata Fallita');

               },

        })





     };

    //###############################################

    //end  validazione ajax
    //###############################################
    

Ho un problema con la risposta di ajax  su check_client() ho provato a inserire when e done  ma la funzione non aspeta il done , sapete come posso risolvere ?

5 Risposte

  • Re: Eseguire funzione dopo il response di una chiamata ajax

    12/04/2023 - pippuccio76 ha scritto:


    Ho un problema con la risposta di ajax  su check_client() ho provato a inserire when e done  ma la funzione non aspeta il done , sapete come posso risolvere ?

    La funzione chiamata controllo_seriale_ajax() restituirà sempre undefined come valore: questo è quello che desideri?

    Il motivo è dato dal fatto che non c'è alcun return al suo interno, salvo quello che si trova nella funzione che gestisce il success, ma quello è un “callback” che verrà eseguito temporalmente dopo che la funzione controllo_seriale_ajax() sarà conclusa e avrà già restituito un potenziale valore di ritorno, ossia undefined, appunto.

    La funzione associata al success peraltro, restituisce il “result” come valore di ritorno ma quel dato non sarà utilizzato da nessuno (JQuery non se ne fa praticamente nulla del valore di ritorno del callback).

    Devi approfondire nell'ordine

    Ciao! :)

  • Re: Eseguire funzione dopo il response di una chiamata ajax

    Ma quindi per salvarmi (utilizzare) come variabile globale il ritorno di ajax devo passarlo ad una funzione ulteriore ?

  • Re: Eseguire funzione dopo il response di una chiamata ajax

    12/04/2023 - pippuccio76 ha scritto:


    Ma quindi per salvarmi (utilizzare) come variabile globale il ritorno di ajax devo passarlo ad una funzione ulteriore ?

    No, per salvarti devi capire come funziona la programmazione asincrona in JavaScript e utilizzare correttamente le Promise, leggendo i link che ti ho passato (ed eventuali altri, se servono per chiarire meglio le idee).

  • Re: Eseguire funzione dopo il response di una chiamata ajax

    Una domanda :

    https://www.w3schools.com/js/js_asynchronous.asp

    perchè qui :

    myCalculator(5, 5, myDisplayer);

    In the example above, myDisplayer is the name of a function.

    It is passed to myCalculator() as an argument.

    perchè è passato non come funzione ?  e quindi senza passare il valore…

    in php se la funzione nella firma ha un argomento devo passarlo (oppure settato di default come NULL) altrimenti va in errore , in js no ?

  • Re: Eseguire funzione dopo il response di una chiamata ajax

    12/04/2023 - pippuccio76 ha scritto:


    perchè è passato non come funzione ?  e quindi senza passare il valore…

    Certo che è passato come funzione: le funzioni in JavaScript sono “first class citizen”, ovvero “cittadini di prima classe”.

    Sono valori che si possono passare come parametri ad altre funzioni, o salvare all'interno di variabili, così come avviene con i valori di qualsiasi altro tipo (numeri, stringhe, ecc.).

    12/04/2023 - pippuccio76 ha scritto:


    in php se la funzione nella firma ha un argomento devo passarlo

    JavaScript è un linguaggio dinamico: la funzione può accettare “n” parametri e sei libero di passarli tutti, nessuno, o anche di più.

    I parametri sono utilizzati semplicemente come “nomi di variabili segnaposto” a cui si assegnano i valori passati nella chiamata alla funzione: i valori mancanti per parametri dichiarati rimangono undefined.

Devi accedere o registrarti per scrivere nel forum
5 risposte