Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151

    restituire true/false all'evento onSubmit

    Salve a tutti,
    sto effettuando delle prove in Javascript e non riesco a far restituire il valore "true" o "false" alla funzione checkData().
    Cosa sbaglio?
    Mi sembra di aver definito una variabile globale err, inizializzata a false che viene cambiata in caso di necessità dalla funzione updatepage().
    Posto il codice:

    codice:
    function checkData() {
       var xmlHttpReq = false;
       var self = this;
       //Url da richiamare
       var strURL="registrationCheck"
       var err=false;
    
       // Mozilla/Safari
       if (window.XMLHttpRequest) {
          self.xmlHttpReq = new XMLHttpRequest();
       }
       // IE
       else if (window.ActiveXObject) {
          self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
       }
       self.xmlHttpReq.open('POST', strURL, true);
       self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
       self.xmlHttpReq.onreadystatechange = function() {
          if (  (self.xmlHttpReq.readyState == 4) ){
             //Aggiorna solo se il server restituisce il codice 200 (Ok) 
             if(self.xmlHttpReq.status == '200')
             {
                //updatepage Modifica la variabile err
                updatepage(self.xmlHttpReq.responseText);
             }
             else //Errore nella richiesta
             {
               var str='<span class="red">';
               str+="Impossibile contattare il server. Il server è fuori servizio oppure non sei connesso ad Internet";
               str+='</span';
               updatepage(str);
             }
          }
       }
       self.xmlHttpReq.send(getquerystring());
       return err;
    }
    
    function updatepage(str){
      //Divida la stringa in st1...str4
      var stringhe=str.split('#',6);
      var ris= new Array("result1","result2","result3","result4");
    
      var i=0;
      for (i=0; i< ris.length; i++)
      {
         document.getElementById(ris[i]).innerHTML = stringhe[i];
      }
      if (stringhe[4]=='true')
      {
         err=true;
      }
      else
      {
         err=false;
      }
    }

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    err non e' globale, ma locale a checkData()

    comunque l' errore e' molto comune per chi si avvicina ad ajax:
    dimenticarsi che l' interazione asincrona comporta ritardi,
    ritardi cha fanno comunque esaurire la funzione

    quando esegui updatepage() checkData ha finito da tempo il suo compito e ritornato il valore di err al momento (sicuramente false, come all' inizializzazione)
    che err cambi valore in un secondo tempo e' irrilevante per checkData

    rivedi la logica della tua applicazione
    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    Ok, ti ringrazio.
    Ho capito il problema da te esposto, effettivamente ho trascurato il fatto che ho utilizzato una chiamata asincrona ma non ho capito come posso modificare una variabile, come per esempio "err", contenuta in una funzione da un'altra funzione esterna
    (anche se questo non risolverò il problema).

    Grazie

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