Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    [Ajax] Errore solo in IE su codice semplicissimo (provate anche voi)

    Carissimi,
    ho riscontrato un problema semplice quanto strano. In una pagina web della mia applicazione, un pulsante attiva una funzione Ajax che prendendo alcuni dati da una servlet Java (servlet che per fare ciò deve ricevere un parametro in input) deve semplicemente mostrarli in una finestra di alert.

    Ecco il semplicissimo codice.

    Pagina:
    codice:
    <td>click</td>
    Funzione javascript richiamata:
    codice:
    function ajaxTest(dtx) {
    
        myRequest = CreateXmlHttpReq(ajaxTest2);
        myRequest.open("GET","ServletDataGet?key=" + dtx + "&_="+-new Date, true);
        myRequest.send(null);
        
    }
    Che richiama a sua volta:
    codice:
    function ajaxTest2() {
        
        if (myRequest.readyState == 4 && myRequest.status == 200) {
        alert(myRequest.responseText);
        }
       
    }


    Tutto qui. Ora, se l'argomento di ajaxTest è un testo statico come in questo caso, tutto funziona sia su Firefox che su Explorer. Se l'argomento è di tipo dinamico, ad esempio prendendo il valore di una casella situata sullo stesso form (sia con l'id che con il nome), su Firefox tutto funziona e vedo la semplice finestra di alert aprirsi correttamente, mentre su Explorer (versioni 5 ma anche 7 e 8) non accade nulla. Segno inequivocabile che dipende solo dal modo in cui, con IE, si passa ad Ajax un valore (se dipendesse da qualsiasi altro fattore, in IE passando testo statico non funzionerebbe).

    Sembra incredibile nella sua semplicità, sono 4 giorni che ci sto dietro; provate anche voi. Cosa suggerite? Grazie a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Per assoluta chiarezza posto anche il modo in cui recupero l'elemento: lo recupero sia con il nome dell'elemento che con il suo id (se a quella funzione tolgo l'esecuzione Ajax e metto un semplice alert vedo correttamente il valore restituito anche in IE).

    codice:
    function ajaxTest() {
    
        // Inserendo UNA di queste due righe se poi apro un alert(dtx) vedo la data anche in IE
        var dtx = document.forms[0].elements["data"].value;
        var dtx = document.getElementById("data").value;
        
        // Però se quel dtx lo uso come argomento per Ajax, in IE non funziona
        myRequest = CreateXmlHttpReq(ajaxTest2);
        myRequest.open("GET","ServletDataGet?ry=" + dtx + "&_="+-new Date, true);
        myRequest.send(null);
        
    }
    Incredibile. Sembra che il terzetto Explorer + Ajax + Valore recuperato da casella sia destinato a litigare in eterno. Soluzioni?

  3. #3
    Ciao, prova con:

    Codice PHP:
    function assegnaXMLHttpRequest() {
        var 
    XHR null;
        
    browserUtente navigator.userAgent.toUpperCase();
        if(
    typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object"){
            
    XHR = new XMLHttpRequest();
        }else if(
    window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) {
            if(
    browserUtente.indexOf("MSIE 5") < 0){
                
    XHR = new ActiveXObject("Msxml2.XMLHTTP");
            } else{
                
    XHR = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return 
    XHR;



    function 
    ajaxTest(dtx) {

       var 
    dtx document.getElementById("data").value;

       var 
    ajax assegnaXMLHttpRequest(); 
       
    ajax.open("GET""ServletDataGet?ry=" dtx "&_="+-new Datetrue);
       
    ajax.setRequestHeader("connection""close"); 
       
    ajax.setRequestHeader("content-type""application/x-www-form-urlencoded");
       
    ajax.onreadystatechange = function(){ 
                if(
    ajax.readyState == 4){ 
                   
    alert(ajax.responseText); 
               } 
       } 
       
    ajax.send(null);


  4. #4
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Ti ringrazio in ogni caso per la tua risposta. Provo subito e ti faccio sapere se funziona. Se riuscissi a restare connesso per i prossimi minuti avrai la risposta in diretta.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Esattamente come il mio codice, funziona sotto Firefox ma non sotto IE. Altre soluzioni?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    EDIT: NON FUNZIONA.

    Nel codice che mi hai postato (colpa mia, ti avevo postato uno sbaglio) la stringa dtx è presa da due parti, sia come argomento in entrata nella funzione che definita nella funzione stessa.

    Naturalmente (scusa la svista) quando dtx è già definita all'interno della funzione non è necessario passarlo come argomento. E proprio in questo caso (quando quindi la funzione diventa quella seguente; quando funzionava passavo l'argomento come testo statico, ecco perché funzionava) ritrovo lo stesso identico errore: in FF si, in IE no. Scusami se ti ho fatto perdere tempo, ecco sotto la funzione che in IE non va. Consigli? Grazie.

    codice:
    function ajaxFinalTest() {
    
       var dtx = document.getElementById("data").value;
    
       var ajax = assegnaXMLHttpRequest();
       ajax.open("GET", "ServletDataGet?ry=" + dtx + "&_="+-new Date, true);
       ajax.setRequestHeader("connection", "close");
       ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
       ajax.onreadystatechange = function(){
                if(ajax.readyState == 4){
                   alert(ajax.responseText);
               }
       }
       ajax.send(null);
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Messaggio appena editato, problema non risolto. Grazie a tutti.

  8. #8
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Una cosa mi lascia perplesso:
    ajax.open("GET", "ServletDataGet?ry=" + dtx + "&_="+-new Date, true);

    ciao
    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

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    BR GRAZIE PER LA TUA RISPOSTA; se non mi aiutate sono in difficoltà!

    Non guardare quei caratteri: è un trucco che qualcuno di voi mi aveva tempo fa suggerito per "scavalcare" la cache di IE e fare in modo che ad ogni azione Ajax il valore non rimanga memorizzato come quello precedente. E' del tutto ininfluente; non è aggiungendo o togliendo quei caratteri che cambia il funzionamento ma solo, ripeto, cambiando il modo di passare quel parametro.

    Ogni volta che cerco di passarlo da un elemento della pagina IE non vuole saperne di eseguirlo: Prova tu stesso quel codice... Ti ringrazio tantissimo, sono 4 giorni che ci sto dietro.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Così semplice, eppure così strano.

    Ho fatto (vi aggiorno per conoscenza di chi eventualmente sta seguendo il problema) ogni tentativo possibile prendendo quel nome sia per nome che per id, ma è sempre la stessa storia.

    1) Quel codice finché gestisce un valore 'statico' funziona benissimo sia su FF che IE, quando prende un valore da un elemento della pagina funziona solo su FF;
    2) Tuttavia, in moltissimi altri punti del programma uso Javascript normalmente per prendere valori da diverse caselle (per alert e moltissimi altri usi) e senza chiamate Ajax non ho mai avuto problemi.

    E' un rompicapo: pare che la fatidica combinazione Ajax + Explorer + getElementById non vada proprio d'accordo. A questo punto attendo fiducioso! Grazie in ogni caso a chi legge.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.