• Moderatore

    AJAX:IE e FIREFOX, ma perchè non vanno mai uguale?

    Ciao a tutti,
    la problematica di oggi (intesa come era geologica proprio) è il capire perchè ie e firefox devano sempre litigare.
    Ho uno script in ajax che richiama dati da una pagina php e fin qua tutto ok.
    I dati si vedono meravigliosamente bene in IE6, in IE7...vado a vedere con FF toccandomi gli zebedei e infatti ecco la martellata.
    Non si vede tutto.
    In pratica io faccio due chiamate a due pagine, ben suddivise in due div con nomi diversi, che richiamano due funzioni Javascript ben distinte che si appoggiano a 2 handlers diversi.
    I risultati delle due chiamate come dicevo si vedono in IE, mentre in FF solo quelli della seconda..
    Considerando che sono abbastanza novello in ajax c'è qualcosa che voi sapete e che io non so?
    thank's
    Criss


  • User Attivo

    Nella prima chiamata interroghi una pagina che non è del tuo dominio?


  • Moderatore

    No no, sono entrambe del dominio di riferimento. E' il db ad essere su di un altro server, ma dato che le interrogazioni singole danno il risultato cercato e le chiamate alle pagine php singolarmente funzionano meravigliosamente non capisco perchè IE si e FF no...mi viene da pensare qualcosa riguardo l'interpretazione diversa del javascript...ma non so cosa...


  • Super User

    hai utilizzato gli indirizzi assoluti?

    http://www.dominio.ext/scrip.php o solo /script.php

    a me con FF dava problemi in questo senso.


  • Moderatore

    Ciao, ho provato con gli indirizzi assoluti ma nulla da fare.
    Qualcuno ha qualche altra idea?
    tra l'altro con IE appena apro la pagina qualche volta (non sempre) si comporta come firefox e cioè visualizza solo la seconda chiamata..ma non appena faccio il refresh tutto si sistema. Con FF manco a martellate.


  • Super User

    immagino le chiamate vengano fatte con window.onload o qualcosa di simile.

    io rincontrollerei la prima chiamata se usa una funzione diversa, o eventualmente controllerei che non vada in timeout la chiamata... e quindi non restituisca nulla ( ovvio se non hai preventivato un output in caso di errore/timeout )


  • Moderatore

    Ciao, nulla di tutto questo...ho cmq sistemato finalmente.
    Il problema era quello di suddividere handlers e chiamate in tutte le forme.


    il codice è:

    var myRequest = null;

    function CreateXmlHttpReq(handler) {
    var xmlhttp = null;
    try {
    xmlhttp = new XMLHttpRequest();
    } catch(e) {
    try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    xmlhttp.onreadystatechange = handler;
    return xmlhttp;
    }

    function myHandler() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
    e = document.getElementById("uno");
    e.innerHTML = myRequest.responseText;
    }
    }

    function myHandler2() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
    e = document.getElementById("due");
    e.innerHTML = myRequest2.responseText;
    }
    }

    function uno(){
    var e = document.getElementById("uno");
    myRequest = CreateXmlHttpReq(myHandler);
    myRequest.open("GET","pagina.php?id=1");
    myRequest.send(null);

    }

    function due(){
    var e = document.getElementById("due");
    myRequest2 = CreateXmlHttpReq(myHandler2);
    myRequest2.open("GET","pagina.php?id=2");
    myRequest2.send(null);

    }

    Nn è bello stilisticamente ma almeno funziona (a meno che non sia l'unico modo..).


  • Super User

    prova a guardare advajax, è una classe javascript molto utile, almeno io mi ci trovo abbastanza bene ad usarla 🙂


  • User Attivo

    ah tu usavi Microsoft.XMLHTTP anche per firefox allora...
    Pensavo ci fossy il "Try"