Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    15

    [AJAX] Object Error in IE6 e ritardo nel ricevere risposta

    Ciau ragazzi la cosa è un po' complessa non sapevo bene come mettere il titolo scusate :P

    Allora mi sto avvicinando ad AJAX da poco quindi sto provando un po' di roba ed è proprio carino.

    Al momento però ho 2 problemi. (posterò di seguito il codice js)

    Uno è che con IE6 quando vado a premere il pulsante che fa partire la funzione per la richiesta mi dà errore nel send, e cioé "object Error" (nella funzione getAll errore: "Non riesco a collegarmi al server: object Error").
    Con opera 9 invece nn mi dà questo errore.


    L'altro problema è che avendo più tasti nella pagina che richiamano la stessa funzione ma con id diversi anziché restituirmi subito quello giusto, devo cliccare dopo aver caricato la pagina 2 volte sul primo tasto poi quando clicco sugli altri anziché darmi l'id giusto mi dà quello del tasto prima.

    l'html per intenderci è una cosa simile a questo:
    codice:
    <div id="showAll91"><input name="showAll" id="91" type="button" value="Show all " onClick="getAll('91')"></div>
    
    
    <div id="showAll23"><input name="showAll" id="23" type="button" value="Show all " onClick="getAll('23')"></div>
    
    
    <div id="showAll16"><input name="showAll" id="16" type="button" value="Show all " onClick="getAll('16')"></div>
    
    
    <div id="showAll45"><input name="showAll" id="45" type="button" value="Show all " onClick="getAll('45')"></div>
    
    
    <div id="showAll67"><input name="showAll" id="67" type="button" value="Show all " onClick="getAll('67')"></div>
    Cerco di spiegarmi meglio:
    se clicco sul primo dovrebbe restiturmi subito (insomma quasi) la risposta che fa semplicemente l'echo del numero passato, cioé 91. Invece di farlo nn fa niente se ci riclicco me lo dà giusto. Dopodiché se clicco sul secondo anziché darmi 23 mi dà 91. Sul terzo mi dà 23 anziché 16 (quello cliccato prima insomma). Sono stato spiegato? Lo spero.

    Eccovi il js che uso. Aiuto plz

    codice:
    // inizializziamo l'oggetto per la richiesta asincrona
      var xmlHttp = createHttpReqObj();
      // funzione per la creazione dell'oggetto asincrono
      function createHttpReqObj()   {
        var xmlHttp;    
    // funziona con tutti i browser tranne IE6 e anteriori
        try
        {
          // proviamo a creare l'oggetto
          xmlHttp = new XMLHttpRequest();
        }
        catch(e)
        {
          //IE6 o anteriori
          var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",                                      
    "MSXML2.XMLHTTP.5.0",                                      
    "MSXML2.XMLHTTP.4.0",                                      
    "MSXML2.XMLHTTP.3.0",                                      
    "MSXML2.XMLHTTP",                                      
    "Microsoft.XMLHTTP");
          // proviamo finché nn ne funziona uno
          for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
           {
            try
             {
               // proviamo a creare l'oggetto
              xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
            }
             catch (e) {}
          }
        }
        // ritorna l'oggetto creato e display errore
         if (!xmlHttp){
          alert("Errore nella creazioen dell'oggetto HTTPRequest.");
        } else {
          return xmlHttp;
      	}
      }
        // contattiamo il server per richiedere le risposte del thread
      function getAll(idToShow)
      {
      var serverParams = "ids=" + idToShow;
        // continuiamo solo se è stato creato l'oggetto
        if (xmlHttp)
        {
          // proviamo a connetterci al server
          try
          {
            xmlHttp.onreadystatechange = handleStateChange(idToShow);
            xmlHttp.open("GET", "getmsgs.php?" + serverParams, true);
            xmlHttp.send();
          }
          // errore
          catch (e)
          {
            alert("Non riesco a collegarmi al server:\n" + e.toString());
          }
        }
        }
        // al cambio dello stato richiama questa funzione
      function handleStateChange(idToShow)
       {
        // quando lo stato e 4 ed è ok (200) leggiamo la risposta    if (xmlHttp.readyState == 4)
         {
          if (xmlHttp.status == 200)
           {
            try 
           {
              // funzione per leggere la risposta
              writeAnswers(idToShow);
            }
            catch(e)
            {
              // errore
              alert("Errore nella lettura della risposta: " + e.toString());
            }
          }
           else
             {
            // status
            alert("Errore nella ricezione dei dati:\n" + xmlHttp.statusText);
          }
        }
      }
        // cosa facciamo con la risposta?
      function writeAnswers(idToShow)
      {
        // risposta del server
        var answers = xmlHttp.responseText;
        //riferimento al div da sostituire
        divToAll = document.getElementById("showAll" + idToShow);
        // mostriamo la risposta
        divToAll.innerHTML = answers;
     }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    15
    Ho risolto non so come ma ho risolto :P

    Ho riscritto tutto da capo alla fine mi dava problema che passavo la variabile all'handler del cambio di stato.... quindi ora glielo faccio passare dal server e amen.

    Mi confermate che quindi nn posso in nessuno modo passare la variabile all'handler? Tipo:

    codice:
    function cc(varxy){
    
    codice..
    
    xmlHttp.onreadystatechange = handler(varxy)
    }
    
    function handler(varpassata){
    
    codice..faccio qualcosa con varpassata
    
    }
    Questo m dava problema nn so mi confermate che nn gliela posso passare? Oppure mi speigate come fare? Grazie mille io con jc so un po' somaro

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.