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

    Problema su ciclo while inspiegabile! Help

    Ciao a tutti,
    stò diventando pazzo davanti ad una situazione 'senza senso' ovvero teoricamente inspiegabile.


    Mediante un pulsante attivo questa funzione:


    function controlloReturn_3() {
    var cod_prod=document.getElementById('codice_prodotto' ).value;
    getProdottoMagazzino("controllo_prodotto", cod_prod);

    do {
    var obj=document.getElementById("descrizione_prodotto" );
    //alert("TEST");
    } while (obj==null);

    aggiornamento();
    }


    Questa funzione esegue una funzione AJAX (getProdottoMagazzino) che carica un form all'interno del quale è presente il campo hidden 'descrizione_prodotto'.

    Evito di incollare il codice in quanto già testato e funzionante.

    La cosa che non riesco a spiegarmi è come mai, al termine del ciclo do-while non viene eseguita la funzione aggiornamento() mentre SE INSERISCO l'alert("TEST") invece mi viene eseguita.

    E' come se il codice volesse 'perdere tempo' con un alert per poter poi uscire dal ciclo e proseguire con l'esecuzione dello script; ma senza l'alert mi si blocca tutto.

    Questo No-Sense mi sta facendo diventare matto.

    Qualcuno che si è trovato in questa situazione o che sa come potermene uscire?

    Grazie anticipatamente a chi vorrà (o saprà) aiutarmi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    3
    Aggiungo qualche altra informazione!


    Originariamente la funzione era così fatta:

    function controlloReturn_3() {
    var cod_prod=document.getElementById('codice_prodotto' ).value;
    getProdottoMagazzino("controllo_prodotto", cod_prod);
    setTimeout("aggiornamento()", 500);
    }

    Grazie al ritardo di 500millis la funzione aggiornamento() poteva accedere ai dati caricati dalla funzione getProdottoMagazzino().

    Succedeva spesso che a causa di una connessione lenta, la funzione aggiornamento non aveva a disposizione i dati caricati dalla funzione getProdottoMagazzino() (tramite ajax)

    Inserire il ciclo do-while mi è venuto in mente per non essere vincolato da un ritardo prefissato; il mio ragionamento è: "se trovi il campo 'descrizione_prodotto' vuol dire che la funzione getProdottoMagazzino() ha caricato con successo il form e quindi puoi eseguire la funzione aggiornamento();"

    Questa logica è corretta MA SOLO se si inserisce un alert() nella funione, in questo modo:

    do {
    var obj=document.getElementById("descrizione_prodotto" );
    alert("TEST");
    } while (obj==null);

    In assenza si alert() il ciclo do-while si blocca!

    Assenza di logica in tutto questo.
    Qualcuno mi può illuminare?

  3. #3
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Un ciclo sifatto senza tempi d'attesa impegna il processore al 999% e non gli consente di fare altro...

    Cosa non ti piace della normare gestione dell'ajax asincrono? puoi gestire la risposta quando arriva...
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    3
    Ciao br1 e grazie per aver risposto al mio appello :-)

    Originariamente inviato da br1
    Un ciclo sifatto senza tempi d'attesa impegna il processore al 999% e non gli consente di fare altro...
    Questo è vero ma solo se non inserisco l'alert(); IE va in palla.
    Ma se inserisco l'alert() non si impalla, anzi; durante il primo ciclo l'oggetto descrizione_prodotto non viene trovato => ritorna NULL e ricomincia il ciclo. Al secondo ciclo, invece, l'oggetto viene caricato dalla funzione ajax => ritona object... ed esce dal ciclo.




    Originariamente inviato da br1
    Cosa non ti piace della normare gestione dell'ajax asincrono? puoi gestire la risposta quando arriva...
    Cosa intendi? Scusa ma non ho approfondito molto ajax e non conosco tutte le sue potenzialità.

    Ti allego in ogni caso la funzione ajax richiamata dallo script:


    function getProdottoMagazzino(targetDiv, codice_prodotto) {
    if (serv) {
    var target = document.getElementById(targetDiv);

    var url = "leggi_prodotto.php";
    var params = "codice_prodotto="+codice_prodotto;
    serv.open("POST", url, true);

    //Send the proper header information along with the request
    serv.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    serv.setRequestHeader("Content-length", params.length);
    serv.setRequestHeader("Connection", "close");

    serv.onreadystatechange = function() {
    if (serv.readyState == 4 && serv.status == 200)
    target.innerHTML = serv.responseText;
    }
    serv.send(params);
    }
    }

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.