Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [AJAX] istruzione eseguita solo se successa da alert!!!

    Salve a tutti,
    sono due giorni che mi rincretinisco con una cosa..
    Richiamo tramite un pulsante questa funzione:
    Codice PHP:
    function test(){
        
    document.getElementById("info").innerHTML "loading...";
        
    miaFunzioneAjax();
        
    document.getElementById("info").innerHTML "loaded!";

    Che non fa altro che scrivere su un div "info" la scritta loading, chiamare un funzione ajax SINCRONA che prende dei contenuti e li scrive su un'altro div, e riscrivere sul div "info" al termine della funzione ajax la scritta loaded...
    Ora dove il problema?
    Il problema è che il primo comando (cioè assegnare al div la scritta loading) non viene eseguito!!! Viene eseguito solo se tra di esso e la funzione ajax ci metto un alert o se lo debuggo con firedebug!!!
    Non riesco a capire il perchè...
    Help!
    What is the |\/|atrix?

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Re: [AJAX] istruzione eseguita solo se successa da alert!!!

    Originariamente inviato da |\/|atrix
    Salve a tutti,
    sono due giorni che mi rincretinisco con una cosa..
    Richiamo tramite un pulsante questa funzione:
    Codice PHP:
    function test(){
        
    document.getElementById("info").innerHTML "loading...";
        
    miaFunzioneAjax();
        
    document.getElementById("info").innerHTML "loaded!";

    Che non fa altro che scrivere su un div "info" la scritta loading, chiamare un funzione ajax SINCRONA che prende dei contenuti e li scrive su un'altro div, e riscrivere sul div "info" al termine della funzione ajax la scritta loaded...
    Ora dove il problema?
    Il problema è che il primo comando (cioè assegnare al div la scritta loading) non viene eseguito!!! Viene eseguito solo se tra di esso e la funzione ajax ci metto un alert o se lo debuggo con firedebug!!!
    Non riesco a capire il perchè...
    Help!

    ho provato così:

    function test()
    {
    document.getElementById("info").innerHTML = "leggo...";
    //miaFunzioneAjax();
    window.setTimeout(miaFunzioneAjax, 1);


    }

    miaFunzioneAjax fa la richiesta ajax in maniera sincrona (se non è una contraddizione )

    nella funzione di ritorno metto quello che restituisce il server più la scritta "letto!"

    document.getElementById("info").innerHTML = t;
    //alert(t);
    document.getElementById("info").innerHTML += "
    letto!";
    Pietro

  3. #3
    Niente da fare.... anch'io avevo provato con vari setTimeout,ajax asincrono etc...
    Il problema è che non viene eseguita la prima istruzione!
    Per la terza instruzione non ho problemi... viene eseguita tranquillamente, perciò non mi serve integrala con il return della funzione ajax...
    Qualche idea?
    What is the |\/|atrix?

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da |\/|atrix
    Niente da fare.... anch'io avevo provato con vari setTimeout,ajax asincrono etc...
    Il problema è che non viene eseguita la prima istruzione!
    Per la terza instruzione non ho problemi... viene eseguita tranquillamente, perciò non mi serve integrala con il return della funzione ajax...
    Qualche idea?
    no, calma, la prima istruzione viene eseguita, con IE7, Firefox2, Opera9. Per verificarlo però, ho fatto in modo che il server ritardi la risposta di n secondi, altrimenti non si vede niente.
    Pietro

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da |\/|atrix
    ...ajax asincrono etc...
    io ho provato con

    objHTTP.open("POST", url, false);

    ossia in modalità sincrona, esattamente come hai scritto te
    Pietro

  6. #6
    Il mio problema è l'esatto contrario... la prima istruzione non viene eseguita... Tutto il resto è ok...
    Anch'io per testarla ho messo nel file php un bel sleep(5)...
    What is the |\/|atrix?

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    boh! :master: questa è la pagina. Prova se va
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head><title>
    	Pagina senza titolo
    </title>
        <script type="text/javascript" src="../js/prototype.js"></script>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function Button1_onclick() 
    {
        test();
    }
    
    function test()
    {
        document.getElementById("info").innerHTML = "leggo...";
        //miaFunzioneAjax();
        window.setTimeout(miaFunzioneAjax, 1);
        
        
    }
    
    function miaFunzioneAjax()
    {
        new Ajax.Request("?ajax_comando=1", {onComplete:showResponse, asynchronous:false} );
        function showResponse(originalRequest)
        {
            var t = originalRequest.responseText;
            document.getElementById("info").innerHTML = t + "
    letto!";
        }
    
    }
    
    // ]]>
    </script>
    </head>
    <body>
        <form name="form1" method="post" action="b.aspx" id="form1">
            <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
            <div id="info"></div>
        </form>
    </body>
    </html>
    Pietro

  8. #8
    Ti posto direttamente il codice della pagina che secondo me facciamo prima..
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <
    title>Documento senza titolo</title>
    <
    script type="text/javascript">
        function 
    _getElementById(idElemento){
            var 
    elemento;
                if(
    document.getElementById){
                    
    elemento document.getElementById(idElemento);
                }else{
                    
    elemento document.all[idElemento];
                }
            return 
    elemento;
        }

        function 
    xmlhttpInstance(){
            var 
    xmlhttp null;
                if(
    window.XMLHttpRequest){// Mozilla, Safari, ...
                    
    xmlhttp = new XMLHttpRequest();
                        if(
    xmlhttp.overrideMimeType){
                            
    xmlhttp.overrideMimeType('text/xml');
                        }
                }else if(
    window.ActiveXObject){// IE
                        
    try{
                            
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                        }catch (
    e){
                            try{
                                
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                            }catch (
    e){
                                
    alert("Errore: Impossibile creare l'istanza XMLHTTP!");
                            }
                        }
                }
            return 
    xmlhttp;
        }
        
        function 
    ajaxDo(url,funzioneDone,div,asynchronous,method){
            
            var             
                
    appendRandom      true,
                
    appendRandomValue "ajaxRnd",
                
    massimaAttesa     2;
            
            var 
                
    useDegradableHref  true,
                
    xmlhttp            xmlhttpInstance();
            
                if(!
    xmlhttp){
                    return 
    useDegradableHref;
                }
                
            var
                
    useDegradableHref false,
                
    parameters        null,
                
    getMethod         "get",
                
    postMethod         "post",    
                
    urlParam          url.split("?"),
                
    url               urlParam[0],
                
    dataChiamata      = new Date(),
                
    inizioChiamata    dataChiamata.getTime(),
                
    verificaTempoTrascorso;

            
                if(
    asynchronous == undefinedasynchronous true;
                if(
    method == undefined)       method       getMethod;
                
                if(
    method == getMethod){
                    if(
    urlParam[1] != undefined){
                        
    url url+"?"+urlParam[1];
                    }
                    
                    if(
    appendRandom){
                        if(
    urlParam[1] != undefined){
                            
    url url+"&"+appendRandomValue+"="+Math.random();
                        }else{
                            
    url url+"?"+appendRandomValue+"="+Math.random();
                        }
                    }
                }
                
                
                if(
    method == postMethod){
                    if(
    urlParam[1] != undefined){
                        
    parameters urlParam[1];
                    }
                    
                    if(
    appendRandom){
                        if(
    urlParam[1] != undefined){
                            
    parameters parameters+"&"+appendRandomValue+"="+Math.random();
                        }else{
                            
    parameters appendRandomValue+"="+Math.random();
                        }
                    }
                    
                }

            
    xmlhttp.open(methodurlasynchronous);
            
    xmlhttp.setRequestHeader("connection""close");
                
                if(
    method == postMethodxmlhttp.setRequestHeader("Content-type""application/x-www-form-urlencoded");
                
                if(
    asynchronousxmlhttp.onreadystatechange = function(){
                                                                    if(
    xmlhttp.readyState === readyState.COMPLETATO){
                                                                        
    verificaTempoTrascorso = function(){};
                                                                            if(
    statusText[xmlhttp.status] === "OK" || statusText[xmlhttp.status] === "Not Modified"){
                                                                                    if(
    typeof(funzioneDone) === "function")   funzioneDone.call(thisxmlhttp.responseTextdiv);
                                                                            }else{
                                                                                
    alert("Errore:\n" xmlhttp.statusText);
                                                                            }
                                                                    }else if(
    massimaAttesa 1000){
                                                                        
    massimaAttesa          massimaAttesa 1000;
                                                                        
    verificaTempoTrascorso = function(){
                                                                                                    
    dataChiamata = new Date();
                                                                                                        if((
    dataChiamata.getTime() - inizioChiamata) > massimaAttesa){
                                                                                                            
    xmlhttp.onreadystatechange = function(){return;};
                                                                                                            
    xmlhttp.abort();
                                                                                                            
    alert("Spiacente, richiesta fallita.\nLa prego di ritentare tra qualche istante.");
                                                                                                        }else{
                                                                                                            
    setTimeout(verificaTempoTrascorso100);
                                                                                                        }
                                                                                                    };
                                                                        
    verificaTempoTrascorso();
                                                                    }
                                                                        
                                                                };

                                                                                                                            
                try{
                    
    xmlhttp.send(parameters);
                        if(!
    asynchronous){
                            if(
    typeof(funzioneDone) === "function")   funzioneDone.call(thisxmlhttp.responseTextdiv);
                        }
                }catch (
    e){
                    
    xmlhttp.abort();
                    
    alert("Spiacente, richiesta fallita.\nLa prego di ritentare tra qualche istante.");
                }
                
                
            return 
    useDegradableHref;
        }


    var 
    readyState = {
        
    INATTIVO:    0,
        
    INIZIALIZZATO:    1,
        
    RICHIESTA:    2,
        
    RISPOSTA:    3,
        
    COMPLETATO:    4
    };

    var 
    statusText = new Array();
    statusText[100] = "Continue";
    statusText[101] = "Switching Protocols";
    statusText[200] = "OK";
    statusText[201] = "Created";
    statusText[202] = "Accepted";
    statusText[203] = "Non-Authoritative Information";
    statusText[204] = "No Content";
    statusText[205] = "Reset Content";
    statusText[206] = "Partial Content";
    statusText[300] = "Multiple Choices";
    statusText[301] = "Moved Permanently";
    statusText[302] = "Found";
    statusText[303] = "See Other";
    statusText[304] = "Not Modified";
    statusText[305] = "Use Proxy";
    statusText[306] = "(unused, but reserved)";
    statusText[307] = "Temporary Redirect";
    statusText[400] = "Bad Request";
    statusText[401] = "Unauthorized";
    statusText[402] = "Payment Required";
    statusText[403] = "Forbidden";
    statusText[404] = "Not Found";
    statusText[405] = "Method Not Allowed";
    statusText[406] = "Not Acceptable";
    statusText[407] = "Proxy Authentication Required";
    statusText[408] = "Request Timeout";
    statusText[409] = "Conflict";
    statusText[410] = "Gone";
    statusText[411] = "Length Required";
    statusText[412] = "Precondition Failed";
    statusText[413] = "Request Entity Too Large";
    statusText[414] = "Request-URI Too Long";
    statusText[415] = "Unsupported Media Type";
    statusText[416] = "Requested Range Not Satisfiable";
    statusText[417] = "Expectation Failed";
    statusText[500] = "Internal Server Error";
    statusText[501] = "Not Implemented";
    statusText[502] = "Bad Gateway";
    statusText[503] = "Service Unavailable";
    statusText[504] = "Gateway Timeout";
    statusText[505] = "HTTP Version Not Supported";
    statusText[509] = "Bandwidth Limit Exceeded";

    function 
    ajaxDone(responseText,target){
        
    _getElementById(target).innerHTML responseText;
    }

    function 
    ajaxLoading(){
        
    _getElementById("loader").innerHTML "loading";
    }
    function 
    ajaxLoaded(){
        
    _getElementById("loader").innerHTML "loaded";
    }

    var 
        
    funzioneDone    ajaxDone,
        
    div             "test",
        
    asincrono       false,
        
    metodo          "get";

    function 
    test(link){
        
    ajaxLoading();
        var 
    ajax ajaxDo(link,funzioneDone,div,asincrono,metodo);
        
    ajaxLoaded();
        return 
    ajax;
    }
    </script>
    </head>

    <body>
    [url="http://localhost/post_get.php?a=b&c=d&f=g"]Test[/url]
    <div id="loader">qui il div info</div>
    <div id="test"></div>
    </body>
    </html> 
    Il contenuto della pagina post_get.php invece è questo:
    Codice PHP:
    <?php
    sleep
    (5);
    echo 
    time()."POST: <pre>";
    print_r($_POST);
    echo 
    "</pre>";
    echo 
    "GET: <pre>";
    print_r($_GET);
    echo 
    "</pre>";
    ?>
    Grazie per il tuo interessamento!
    What is the |\/|atrix?

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Mi dispiace, ma non me la sento di guardarmi tutto quel codice.
    Sono del parere che con ajax, o si usa una propria procedura fatta bene o si usa una buona procedura fatta da altri. Io ti ho fatto l'esempio con prototype e ti faccio notare la brevità del codice.


    ps. ajax sincrono non funzionava con vecchie versioni di firefox
    Pietro

  10. #10
    Non devi guardarti il codice, basta fare un copia incolla, testalo e dimmi se hai il mio stesso problema...
    Altrimenti ti ringrazio lo stesso! figurati... hai già fatto anche tanto!!!!
    What is the |\/|atrix?

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.