Visualizzazione dei risultati da 1 a 6 su 6

Discussione: chiamata AJAX IE vs FF

  1. #1
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365

    chiamata AJAX IE vs FF

    Salve, ho un problema con IE 7 su una chiamata AJAX ad un file di controllo php

    questo è il codice

    codice:
    function controlla(){
    
    
    //ajax   
            http_request = false;
    		var CATEGORIA_nome = Trim(document.form.CATEGORIA_nome.value);
    
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');
                    // See note below about this line
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
    
            if (!http_request) {
                alert('Spiacente non posso creare una istanza XMLHTTP');
                return false;
            }
           	http_request.onreadystatechange = alertContents_controlla;
            http_request.open('GET', 'controlla_inserire_ajax.php?CATEGORIA_nome='+CATEGORIA_nome,true);
            http_request.send(null);
    
    }//chiudo controlla()
    
    function alertContents_controlla(){
    
    
    		if (http_request.readyState == 4) {
                     if (http_request.status == 200) {
                   		var controllo = http_request.responseText;
                            alert (controllo)
    il file php controlla_inserire_ajax.php prende la variabile passata in get, controlla se esiste sul database una corrispondeza, e stampa un valore di controllo (per comodità 1 o 0) che viene poi captato dalla variabile http_request.responseText

    ora cosa succede:
    quando eseguo questa pagina con la cache di IE vuota, il controllo funziona perfettamente, quando provo ad eseguirla una seconda volta il valore di controllo sarà sempre 0;

    aggiorno la pagina, effettuo altre prove, cambio il valore nel form, riprovo, ma sempre 0!

    questo non accade con FF, ho attivato anche firebug per controllare cosa vine stampato dalla pagina php e i risultati sono sempre corretti...

    veramente non ho idea di cosa possa influenzare IE, qualcuno ha un'idea?

    è come se quando facesse la chiamata ajax utilizzasse la cache e quindi i valori sono sballati

    grazie

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho guardato gli esempi che ho:

    1) passando i dati via post non si manifesta il problema

    2) passando i dati via get, bisogna dare da server l'istruzione per non mandare la pagina in cache

    io uso asp.net, ma so di sicuro che esiste una identica istruzione in php (che non conosco)
    Pietro

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

    <?
    Header('Cache-Control: no-cache');
    Header('Pragma: no-cache');
    ?>


    :master:
    Pietro

  4. #4
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    grazie per il consiglio, ma xkè non succede con FF?

    cmq mi sai dire cosa cambiare per mandare i dati via post?

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    questa è un esempio che ho; adattala al tuo scopo
    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>
        <link href="../../stili/Styles.css" rel="stylesheet" type="text/css" />
    
        <script type="text/javascript">
            function ListBox_regioni_onchange_get(v)
            {
                /*-----------------------------------------------------------------------
                Qui faccio alcune operazioni prima di richiamare ajax.
                Per esempio, disabilito la lista regioni, o rendo visibile una immagine
                per indicare ajax al lavoro
                ------------------------------------------------------------------------*/
                //disabilito la lista regioni
                v.disabled = true;
                
                
                //creo l'oggetto che fa la richiesta http
                var objHTTP = null;
    	        if(window.XMLHttpRequest) 
    	        {
    		        // Gecko (Firefox, Moz), KHTML (Konqueror, Safari), Opera, Internet Explorer 7
    		        objHTTP = new XMLHttpRequest(); 
    	        } 
    	        else if(window.ActiveXObject) 
    	        {
    		        try
    		        {
    			        // Internet Explorer 6 
    			        objHTTP = new ActiveXObject("MSXML2.XMLHTTP"); 
    		        } 
    		        catch(e) 
    		        {
    			        // Internet Explorer 4,5 
    			        objHTTP = new ActiveXObject("Microsoft.XMLHTTP"); 
    		        }
    		        } 
    	        else 
    	        {
    		        alert("Non è possibile creare l'oggetto che fa la richiesta http");
    		        return;
    	        }
                
                //lista parametri da mandare via post nel formato
                //variabile1=valore1&variabile2=valore2...
                var parametri = "codice_istat_regione=" + encodeURIComponent(v.value);
    	        //parametri = parametri.replace(/\+/g, "%2B");
    	        
    	        /*-------------------------------------------------------------------------
    	        La risorsa da richiedere è la pagina server che svolge i compiti richiesti.
    	        Se è la medesima, si può usare ?.
    	        Può naturalmente essere seguita da parametri.
    	        In questo caso spedisco il parametro ajax_comando per dire alla pagina
    	        cosa fare
    	        --------------------------------------------------------------------------*/
    	        var url = "ajax_in_action/regioni_provincie.aspx?ajax_comando=provincie";
    	        
    	        
    	        //apertura connessione HTTP
    	        //1° parametro, GET, POST, HEAD
    	        //2° parametro, risorsa da richiedere: ? per richiamare la pagina medesima
    	        //3° parametro, asincrona=true, sincrona=false
    	        objHTTP.open("POST", url, true);
    	        objHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	        objHTTP.setRequestHeader('Content-length',parametri.length);
    	        //objHTTP.setRequestHeader('Connection', 'close');
    	        //objHTTP.setRequestHeader("connection", "keep alive");//questo è predefinito
            	
    	        /*--------------------------------------------------------------------------------
    	        //impostazione della funzione di callback: in questo caso, la funzione è in linea.
    	        //ma è possibile indicare il NOME della funzione. Per esempio:
    	        //objHTTP.onreadystatechange = mia_funzione; //nota: senza parentesi finali
    	        // e altrove, per esempio più sotto, definire la funzione:
    	        //function mia_funzione(){...}
    	        ---------------------------------------------------------------------------------*/
    	        objHTTP.onreadystatechange = function() 
    	        {
    		        if (objHTTP.readyState == 4) 
    		        {
    			        if (objHTTP.status != 200) 
    			        {
    			            /*--------------------------------------------------------------------
    			            Qui sono in errore, e faccio le opportune operazioni, per esempio,
    			            riabilito i pulsanti disabilitati, messaggio di errore, etc...
    			            ---------------------------------------------------------------------*/
    			            v.disabled = false;
    			            
    			            alert("ERRORE NELLA TRASMISSIONE DATI!" 
    			                    + "\n\nreadyState:"
    			                    + objHTTP.readyState 
    			                    + "\nstatus: "
    			                    + objHTTP.status 
    			                    + "\nstatusText: " 
    			                    + objHTTP.statusText 
    			                    + "\n\nheaders:\n"
    			                    + objHTTP.getAllResponseHeaders()
    			                ); 
    			            return;
    			        }
            			
    			        /*--------------------------------------------------------------------
    			        Qui ho ottenuto i dati dal server
    			        o sotto forma di testo o html, con objHTTP.responseText
    			        o sotto forma di xml, con objHTTP.responseXML
    			        ---------------------------------------------------------------------*/
    			        var t = objHTTP.responseText;
            			//var tx = objHTTP.responseXML;
            			
    			        //creo la lista provincie
    			        document.getElementById("div2").innerHTML = "Scegli la provincia:
    " + t;
    			        
    			        //riabilito la lista regioni
    			        v.disabled = false;
    		        }
    	        };
            	
    	        
    	        
    	        
    	        //invio della richiesta, per GET e HEAD è null
    	        objHTTP.send(parametri);
                
                
                
                
            }
        </script>
    
    </head>
    <body>
        <form id="form1" action="?">
            <div id="div1" style="float: left">
                Scegli la regione:
    
                <select name="regioni" id="regioni" onchange="ListBox_regioni_onchange_get(this);" style="height: 333px; width: 208px;" multiple="multiple">
                    <option value="13">ABRUZZO</option>
                    <option value="17">BASILICATA</option>
                    <option value="18">CALABRIA</option>
                    <option value="15">CAMPANIA</option>
                    <option value="08">EMILIA-ROMAGNA</option>
                    <option value="06">FRIULI-VENEZIA GIULIA</option>
                    <option value="12">LAZIO</option>
                    <option value="07">LIGURIA</option>
                    <option value="03">LOMBARDIA</option>
                    <option value="11">MARCHE</option>
                    <option value="14">MOLISE</option>
                    <option value="01">PIEMONTE</option>
                    <option value="16">PUGLIA</option>
                    <option value="20">SARDEGNA</option>
                    <option value="19">SICILIA</option>
                    <option value="09">TOSCANA</option>
                    <option value="04">TRENTINO-ALTO ADIGE</option>
                    <option value="10">UMBRIA</option>
                    <option value="02">VALLE D'AOSTA</option>
                    <option value="05">VENETO</option>
                </select>
            </div>
            <div id="div2">
                Scegli la provincia:
    
            </div>
        </form>
    </body>
    </html>
    Pietro

  6. #6
    Utente di HTML.it L'avatar di coteaz
    Registrato dal
    Mar 2006
    Messaggi
    365
    grazie, proverò

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.