2010-11-19 4 views
0

저는 글로벌 변수 사용을 피하기 위해 게터 및 설정자와 협력 해 왔습니다. 그러나, 나는 문제가 생겼다. 정수 변수로 잘 작동하는 아래 코드는 AJAX 호출을 실행하려고 할 때 예외를 throw합니다. 누군가 왜 이런 일이 일어 났는지 설명 할 수 있습니까?Getters 및 Setters와 함께 AJAX로드


function Object_XML() { 
    me = this; 
    me.xml = null; 
} 

Object_XML.prototype = { 

    getXML: function() { 
     return me.xml 
    }, 

    setXML: function(data) { 
     me.xml = data; 
    }, 

    loadXML: function() { 
     $.ajax({ 
      type: "GET", 
      url: "questions.xml", 
      dataType: "xml", 
      success: function(xml) { 
       me.setXML(xml);   
      } //close success  
     });//close AJAX 
    }//close setXML 

}; 

$(document).ready(function() { 
    var data = new Object_XML(); 
    alert("This is an " + data.getXML()); 
    data.setXML(); 
    alert("This is an " + data.getXML()); 
}); 

덕분에, 엘리엇 보너 빌

+0

'me'없이 시도해보십시오. 그래서'success : function (xml) {setXML (xml); }' – jcolebrand

답변

0

당신은 var를 사용하지 않음으로써 당신은 단지 me 전역 변수 만든 me = this;를 사용하여 getter 및 setter와 private 변수의 사용을 부정. (var를 사용하여 정의되지 않은 변수는 전역 네임 스페이스에 연결됩니다.)

동일한 개체 범위 내에서 작업하고 있으므로 this을 개인적으로 사용하지 않고 me을 사용하면 혼란 스럽습니다. 그러나 당신이 그 패러다임에 충실하고 싶다면, var me = this;

당신의 예제는 정말로 명확하지 않습니다. 어디에서 에러가 발생합니까? 매개 변수없이 data.setXml()을 호출 중이므로 me.xmlundefined으로 설정됩니다. 그 방법에 아무 것도 전달하지 않으면 예상되는 것입니다. 그 순간에

data.loadXml(); 
console.log("data.getXML();", data.getXML()); // would be undefined 

data.getXML()이 가능성이 비동기의로 아직 정의되지 것입니다 : 당신이 그런 짓을한다면

또한, 인해 통화의 비동기 특성으로 염두에 두어야 호출이 아직 반환되지 않았으므로 개체의 xml 특성을 설정하지 않습니다.

관련 문제