[JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

di il
16 risposte

[JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

Ciao a tutti,
ho dei problemi con con uno spinner, è un modal che viene aperto in beforeSend e chiuso al complete.

Vi posto una porzione di codice... non riesco a capire dove c'è l'errore.

Nel PC dove programmo prima mi dava il problema, poi ho eseguito un debug del PHP e ora il problema non lo dà. Però se utilizzo un pc diverso da mio il problema si pone.... E' un po' ambigua...

In console non ho errori... Per fare una prova stupida, ho inserito un alert al complete e mi restituisce l'alert, ma il modal non viene chiuso.

$.ajax({
            type: "POST",
            url: "myapi.php",
            data: {"data": data},
            dataType: "json",
            contentType: 'application/x-www-form-urlencoded',            
            timeout: 3000,
            beforeSend: function(){
                $("#attesa").modal();
            },
            success: function(risposta){
                if (risposta.success){
                    $('#risultato').html(risposta.obj);
                    $.getScript('../js/call.cittapaesi.js');
                }else{
                    window.location.replace("../");
                }
            },
            complete: function(){
                $("#attesa").modal("hide");
            },
Vi viene in mente qualche idea, intuizione?

Grazie ciao

16 Risposte

  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    cali ha scritto:


    ho dei problemi con con uno spinner, è un modal che viene aperto in beforeSend e chiuso al complete.
    La chiamata a modal() devi farla all'esterno e prima dell'invocazione AJAX, in modo da inizializzare la dialog nel modo opportuno con tutte le opzioni del caso (dimensioni, visualizzazione on-demand, ecc.).

    Successivamente, userai .modal('show') e .modal('hide') per visualizzare e nascondere la finestra modale.

    Ciao!
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Alka ha scritto:


    cali ha scritto:


    ho dei problemi con con uno spinner, è un modal che viene aperto in beforeSend e chiuso al complete.
    La chiamata a modal() devi farla all'esterno e prima dell'invocazione AJAX, in modo da inizializzare la dialog nel modo opportuno con tutte le opzioni del caso (dimensioni, visualizzazione on-demand, ecc.).

    Successivamente, userai .modal('show') e .modal('hide') per visualizzare e nascondere la finestra modale.

    Ciao!
    Scusami ma cosa intendi all'esterno?

    Potresti farmi 1 esempio per cortesia...

    Non ti ho capito.

    Ciao e grazie
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    cali ha scritto:


    Scusami ma cosa intendi all'esterno?
    Ho detto "all'esterno" per indicare una posizione fuori dai callback che hai definito, ad esempio in fase di inizializzazione della pagina.

    Crei la finestra modale in questo modo:
    
    $('#attesa').modal({
      show: false
    });
    
    affinché essa venga inizializzata ma non visualizzata subito... in poche parole, potremmo considerarla "pronta all'uso".

    Volendo puoi aggiungere altre opzioni all'oggetto specificato come parametro al metodo modal().

    Quando esegui la chiamata AJAX, è sufficiente usare $('#attesa').modal('show') oppure $('#attesa').modal('hide') per - rispettivamente - visualizzare e nascondere la dialog modale inizializzata in precedenza.

    Ciao!
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Buongiorno,
    grazie per l'esempio....

    Se ho ben capito così:
    
    $('#attesa').modal({
      show: false
    });
    
    $.ajax({
                type: "POST",
                url: "myapi.php",
                data: {"data": data},
                dataType: "json",
                contentType: 'application/x-www-form-urlencoded',            
                timeout: 3000,
                beforeSend: function(){
                    $("#attesa").modal("show");
                },
                success: function(risposta){
                    if (risposta.success){
                        $('#risultato').html(risposta.obj);
                    }else{
                        window.location.replace("../");
                    }
                },
                complete: function(){
                    $("#attesa").modal("hide");
                },
    });
    
    Ho provato... ma è sempre uguale.

  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    cali ha scritto:


    Se ho ben capito così: [...]
    Ho provato... ma è sempre uguale.
    Ok, ma a questo punto prova a vedere se nella console del browser (F12 Developer Tools) compare qualcosa.
    Prova a inserire dei log nelle funzioni per accertarti che non ci siano errori e che vengano eseguite.
    Verifica la versione degli script che stai utilizzando (usi Bootstrap? che versione?).

    Insomma, inizia a predisporre degli strumenti diagnostici - anche rudimentali - che ti permettano di tracciare l'esecuzione del codice, oppure facendo debug passo per passo.

    Ciao!
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Si, utilizzo bootstrap 4.6.

    Durante l'esecuzione del codice in console non ho errori.

    Devo predispormi per vedere se in console ho dei problemi.

    Mi predispongo anche per eventuali debug...

    Per ora grazie...

    Ciao
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Aggiungo... Jquery 3.5.1.

    Se ci sono consigli o lumi... Sono bene accetti.

    Ciao e grazie ancora
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    cali ha scritto:


    Se ci sono consigli o lumi... Sono bene accetti.
    Una domanda: quanto tempo passa dall'inizializzazione della dialog alla chiamata Ajax?
    Magari converrebbe postare anche la parte rilevante dell'HTML per verificare che sia tutto a posto.

    Ciao!
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Ho modificato la chiamata da json in html.

    Ora mi restituisce dal server una select con le varie option. Ho commentato ini_set('display_errors', 'Off'); nel PHP.

    Nel complete ho impostato console.log(jqXHR.status) console.log(jqXHR.responseText).

    status 200 e ciò che restituisce è giusto.

    La visualizzazione è immediata.

    Ho una select che carico al login dove ci sono varie province. In base alla provincia eseguo una chiamata al server in post dove espongo le vaie città/paesi. per ora fa solo questo. Ho tolto il $.getScript che mi richiamava la costruzione in jquery del codice html e la chiamata ad uno script che poi mi serve per inviare dei dati ai server agid, del governo!
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Ho 1 altro quesito, utilizzando
    $.getScript('pippo.js?tipo=A')
    non sono riuscito a trovare un modo per richiamare il dato che passo. Ho cercato online ma trovo solo con una funzione per controllare se il load è ok.

    Tipo questo:
    
    $.getScript('pippo.js?tipo=A')
    .done(function( script, textStatus ) {
        console.log( textStatus );
      })
      .fail(function( jqxhr, settings, exception ) {
       console.log( "Carimento fallito" );
    });
    Non saprei come recuperare il dato se possibile.

    Ciao
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Ho fatto una prova per le ricerche e l'esposizione dei dati in tabella con datatable.

    Se cerco un dato che ha bisogno di circa 1 o 2 secondi il modal si apre e chiude correttamente.

    Se eseguo una ricerca, e cerco qualcosa che non c'è ne DB, il modal rimane aperto... e non si chiude. Idem se cerco dei dati che tra l'esecuzione e la visualizzazione impiega 20ms o 150ms.

    Potrebbe essere una questione di esecuzione. Passa troppo poco tempo tra apertura e chiusura e non riesce ad elaborare lo show e l'hide?

    Ciao
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    cali ha scritto:


    Se cerco un dato che ha bisogno di circa 1 o 2 secondi il modal si apre e chiude correttamente. [...]
    Passa troppo poco tempo tra apertura e chiusura e non riesce ad elaborare lo show e l'hide?
    Tutto può essere: è chiaro che se l'operazione è così veloce da completarsi in tempo utile senza che si riesca a mostrare la finestra se non per un istante, potrebbe sembrare che questa non appaia.

    Inserendo comunque un delay (solo per prova) nella risposta lato server, o nascondendo la modal con l'uso di un setTimeout(), scoprirai ben presto se è così.
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Ciao,
    se riesco provo questa sera altrimenti... Domani!

    Singolare come cosa.... Proverò sia lato server che setTimeout() in js. Sono proprio curioso...

    Grazie mille
  • Re: [JQUERY] Spinner: al completamento della chiamata ajax non viene chiuso

    Alka ha scritto:


    cali ha scritto:


    Se cerco un dato che ha bisogno di circa 1 o 2 secondi il modal si apre e chiude correttamente. [...]
    Passa troppo poco tempo tra apertura e chiusura e non riesce ad elaborare lo show e l'hide?
    Tutto può essere: è chiaro che se l'operazione è così veloce da completarsi in tempo utile senza che si riesca a mostrare la finestra se non per un istante, potrebbe sembrare che questa non appaia.

    Inserendo comunque un delay (solo per prova) nella risposta lato server, o nascondendo la modal con l'uso di un setTimeout(), scoprirai ben presto se è così.

    Buongiorno,
    ho impostato un setTimeout() in jquery e funziona...

    Vi posto il codice, magari può servire a qualcuno, se non dovete loggare togliete jqXHR, console.log(jqXHR.status); e console.log(jqXHR.responseText);
    
    complete: function(jqXHR){
                    setTimeout(function() { 
                        $("#attesa").modal("hide");
                    }, 430);
                    console.log(jqXHR.status);
                    console.log(jqXHR.responseText);
                },
    
    La cosa che mi fa stano è che se il timeout è < di 430 il modal rimane appeso.... se è >= a 430 si chiude correttamente!

    E' un problema di bootstrap?

    Stupidamente mi sono creato un div, al suo interno ho scritto Attendere... con proprietà hidden in css. Eseguo sempre lo stesso codice... il div funziona correttamente!

    Ciao
Devi accedere o registrarti per scrivere nel forum
16 risposte