nimble: Kennt Objekt nicht mehr

Hi

Ich habe mir einen Connector gebastelt, nur kennt der seine eigenen Objekte nicht...

[code lang=javascript]
function ChttpConnector()
{
 this.resObjekt = new ActiveXObject("Microsoft.XMLHTTP");

this.getXml = function()
 {
 this.resObjekt.open('get', 'nr.xml');
 this.resObjekt.onreadystatechange = this.handleResponse;
 this.resObjekt.send();
 }

this.handleResponse = function()
 {
  if (this.resObjekt.readyState == 4)
  {
   return this.resObjekt.responseXML;
  }
 }
}
[code]

Bitte nicht auslachen - bin erst seint 2 Tagen am JS Coden...

  1. Hey,

    function ChttpConnector()
    {
    this.resObjekt = new ActiveXObject("Microsoft.XMLHTTP");

    this.getXml = function()
    {
    this.resObjekt.open('get', 'nr.xml');
    this.resObjekt.onreadystatechange = this.handleResponse;
    this.resObjekt.send();
    }

    this.handleResponse = function()
    {
      if (this.resObjekt.readyState == 4)
      {
       return this.resObjekt.responseXML;
      }
    }
    }

      
    und wo genau liegt dein Problem?  
      
    Tschö  
    
    
    1. und wo genau liegt dein Problem?

      Die Methode «handleResponse()» wird zwar aufgerufen, kennt aber das Objekt «resObjekt» nicht.

      ------------------------------
      lieber ein Pinguin der läuft
      als ein Fenster das hängt
      ------------------------------

      1. Hey,

          
        
        > >  this.handleResponse = function()  
        
        

        Hier erstellst du eine closure in der this nicht mehr gültig ist.

          
        
        > >  {  
        > >   if (this.resObjekt.readyState == 4)  
        > >   {  
        > >    return this.resObjekt.responseXML;  
        > >   }  
        > >  }  
        
        

        versuch es mit:

          
        var bla = this;  
        
        > >  this.handleResponse = function()  
        > >  {  
        > >   if (bla.resObjekt.readyState == 4)  
        > >   {  
        > >    return bla.resObjekt.responseXML;  
        > >   }  
        > >  }  
        
        

        Tschö

        1. Ähem,

          Hier erstellst du eine closure in der this nicht mehr gültig ist.

          Ist natürlich falschrum:

          Hier erstellst du keine closure und this bezieht sich nicht mehr auf dein original this.

          Tschö

        2. var bla = this;

          this.handleResponse = function()
          {
            if (bla.resObjekt.readyState == 4)
            {
             return bla.resObjekt.responseXML;
            }
          }

            
          Ich hab statt var bla = thi das ResponseObjkt global(?) gemacht:  
            
          ~~~javascript
            
          var resObjekt = new ActiveXObject("Microsoft.XMLHTTP");  
            
          this.getXml = function()  
          {  
           worldTurn();  
           resObjekt.open('get', 'nr.xml');  
           resObjekt.onreadystatechange = this.handleResponse;  
           resObjekt.send();  
          }  
            
          this.handleResponse = function()  
          {  
           if (resObjekt.readyState == 4)  
           {  
            return resObjekt.responseXML;  
           }  
          }  
          
          

          nur leider meldet der IE jetzt das «responseXML» null oder kein Objekt sei...
          kann das so nicht funktionieren?

          THX

          --
          ie:} fl:( br:> va:) ls:& fo:# rl:( n4:? ss:) de:] js:| ch:? sh:) mo:? zu:)
          ------------------------------
          lieber ein Pinguin der läuft
          als ein Fenster das hängt
          ------------------------------
          1. Hey,

            nur leider meldet der IE jetzt das «responseXML» null oder kein Objekt sei...
            kann das so nicht funktionieren?

            THX

            was sagt: return resObjekt.responseText; ?

            Tschö

            1. Hi

              was sagt: return resObjekt.responseText; ?

              gibt das XML schön aus...

              Der Fehler scheint sich verlagert zu haben:

                
               this.handleResponse = function()  
               {  
                if (resObjekt.readyState == 4)  
                {  
                 alert (resObjekt.responseText);  
                 return resObjekt.responseText;  
                }  
               }  
              
              

              Das alert funktioniert und gibt den XML als Text aus.
              der return gibt undefinied zurück, wie das alert zeigt:

                
              window.onload = function()  
              {  
               var connector = new ChttpConnector();  
               alert(connector.getXml());  
              }  
              
              

              THX

              --
              ie:} fl:( br:> va:) ls:& fo:# rl:( n4:? ss:) de:] js:| ch:? sh:) mo:? zu:)
              ------------------------------
              lieber ein Pinguin der läuft
              als ein Fenster das hängt
              ------------------------------
              1. Hi

                this.handleResponse = function()
                {
                  if (resObjekt.readyState == 4)
                  {
                   alert (resObjekt.responseText);
                   return resObjekt.responseText;
                  }
                }

                window.onload = function()
                {
                var connector = new ChttpConnector();
                alert(connector.getXml());
                }

                  
                Ich habs rausgefunden - ganz schön fies:  
                  
                con.getXml ruft zwar den HTTP request an, dieser wird aber dann von der Funktion handleResponse verarbeitet und zurückgegeben. Dummerweise liefert die funktion getXml nix zurück also gibts auch nix zum weiterarbeiten... schade :-(  
                  
                  
                THX
                
                -- 
                ie:} fl:( br:> va:) ls:& fo:# rl:( n4:? ss:) de:] js:| ch:? sh:) mo:? zu:)  
                \------------------------------  
                lieber ein Pinguin der läuft  
                als ein Fenster das hängt  
                \------------------------------