2013-08-09 5 views
0

У меня есть проблема при попытке доступа к переменной с моим xmlhttprequest. У меня есть следующий код:Ошибка при доступе к переменной

function MyObject(){ 
    this.variable = 0; 
} 

MyObject.prototype = { 
    request: function(url, call_function){ 
     try{ 
      if(window.XMLHttpRequest) 
       httpRequest = new XMLHttpRequest(); 
      else if(window.ActiveXObject) 
       httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 

      httpRequest.onreadystatechange = function(data) 
      { 
       try 
       { 
        if(httpRequest.readyState == 4) 
        { 
         if(httpRequest.status == 200){ 
          var tab = JSON.parse(httpRequest.responseText).childs; 
          call_function.apply(this, Array(tab)); 
         } 
        } 
       } 
       catch(e){} 
      }; 
      httpRequest.open('GET', url); 
      httpRequest.send(); 
     } 
     catch(err){} 
    }, 

    start: function(url){ 
     this.request(url, this.func); 
    }, 

    func: function(){ 
     try{this.variable = 5;} 
     catch(err){alert(err);} 
    } 
}; 

var obj = new MyObject(); 
obj.start(url); 

С помощью этого кода, когда программа выполняет функцию «Func» он ловит исключение, и он говорит мне, что «this.variable» не определен. Вы знаете, почему я не могу получить доступ к этой недвижимости?

ответ

0

Когда вы звоните

call_function.apply(this, Array(tab)); 

this не относится к вашему MyObject инстанциирован. Он ссылается на функцию, которую вы объявили и назначили событию onreadystatechange. Вам необходимо сохранить ссылку на объект:

request: function(url, call_function){ 
    try{ 
     var self = this; 
     if(window.XMLHttpRequest) 
      httpRequest = new XMLHttpRequest(); 
     else if(window.ActiveXObject) 
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 

     httpRequest.onreadystatechange = function(data) 
     { 
      try 
      { 
       if(httpRequest.readyState == 4) 
       { 
        if(httpRequest.status == 200){ 
         var tab = JSON.parse(httpRequest.responseText).childs; 
         call_function.apply(self, Array(tab)); 
        } 
       } 
      } 
      catch(e){} 
     }; 
     httpRequest.open('GET', url); 
     httpRequest.send(); 
    } 
    catch(err){} 
}, 
+0

Ох, я вижу. Спасибо за помощь :) – user2302725

Смежные вопросы