Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    142

    Ajax - Non funziona su Ie ma su FF

    Salve a tutti,
    non capisco per quale motivo il seguente codice funziona bene su ff ma non su ie7. Qualcuno sa darmi qualche dritta?

    // Get the HTTP Object
    function getHTTPObject(){
    if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
    else if (window.XMLHttpRequest) return new XMLHttpRequest();
    else { alert("Your browser does not support AJAX.");
    return null;
    }
    }
    // Change the value of the outputText field
    function setOutput(){
    if(httpObject.readyState == 4) {
    document.getElementById('txtIDrf').value = "Associato";
    document.getElementById('txtIDrf').className = "txtboxAss";
    document.getElementById('txtIDrfHidden').value = httpObject.responseText;
    }
    }
    // Implement business logic
    function doWork(){
    httpObject = getHTTPObject();
    if (httpObject != null) {
    httpObject.open("GET", "ajxLettura.php", true);
    httpObject.send(null);
    httpObject.onreadystatechange = setOutput;
    }
    }
    var httpObject = null;

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    142
    Volevo precisare che funziona solo la prima volta. Per farlo funzionare devo chiudere e riavviare il boroser.
    Inoltre la funzione che viene richiamata è doWork

    Aiuto

  3. #3
    codice:
    // Get the HTTP Object
    function getHTTPObject(){
      if (window.XMLHttpRequest) return new XMLHttpRequest();
      if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
      else { 
        alert("Your browser does not support AJAX.");
        return null;
      }
    }
    
    // Change the value of the outputText field
    function setOutput(){
      if(this.readyState == 4) {
        document.getElementById('txtIDrf').value = "Associato";
        document.getElementById('txtIDrf').className = "txtboxAss";
        document.getElementById('txtIDrfHidden').value = httpObject.responseText;
      }
    }
    
    // Implement business logic
    function doWork(){
      var httpObject = getHTTPObject();
      if (httpObject != null) {
        httpObject.open("GET", "ajxLettura.php?noCache=" + new Date().getSeconds() + '' + Math.floor(Math.random() * (9999)), true);
        httpObject.send(null);
        httpObject.onreadystatechange = setOutput;
      }
    }
    Devi usare variabili locali per non sovrascrivere l'oggetto XMLHttpRequest.
    Oltre a ciò per evitare il bug del caching da parte di IE devi inviare un parametro aggiuntivo che fa nuovamente richiedere la pagina al server.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    142
    Grazie per la risposta.
    Per quanto riguarda il bug su IE è ok. Non ho capito pro il problema della varbiale locale, nel senso che solo modificando la parte relativa al bug della cache lo script adesso funziona bene sia su ie che ff però se inserirsco acnhe le altre modifiche che mi hai segnalato lo script non funziona correttamente.

  5. #5
    Mi era sfuggito che nella funzione setOutput httpObject era richiamato un'altra volta.
    Sostitusci httpObject.responseText con this.responseText e dovrebbe funzionare.
    La variabile locale va usata perchè è sempre meglio instanziare sempre un nuovo oggetto piuttosto che usare lo stesso, ad esempio ciò permette di eseguire più richieste.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    142
    si, mi ero accorto che ti era sfuggito per cui avevo gia fatto questa sostituzione anche su quella riga, ma sembra non andare lo stesso...

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.