여기 내 개체가 있고 모든 속성과 함수를 정의했지만 여전히이 오류 result is not defined
을 제공합니다. 여기결과 속성이 정의되어 있지 않습니다. 왜?
는
var Xml = {
to : null,
from : null,
url : null,
result : null, //<--- I defined result here
init: function (fromaddress, toaddress, link) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml();
return this;
},
requestXml: function() {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: this.parseXml
});
},
parseXml: function (xml) {
console.log('xml: ' + $(xml));
result = $(xml); //<--- Assigning value to result here
},
getResult: function() {
console.log('Result: ' + result); // <--- Here is says result is not defined
return result;
}
};
가 어떻게이 문제를 해결할 수있는 내 코드?
업데이트
내가
var Route = {
fromurl : null,
tourl : null,
from : null,
to : null,
init: function (fromaddress, toaddress) {
from = fromaddress;
to = toaddress;
fromurl = 'http://demo.com/url'+fromurl;
tourl = 'http://demo.com/url'+tourl;
Route.searchRoute();
},
searchRoute: function() {
var xml = Xml.init(from, to, fromurl);
console.log(xml.getResult()); //<---- calling getResult();
}
};
이것은 AJAX 요청이 비동기 적이기 때문에'obj.requestXml()'다음에'obj.getResult()'를 곧바로 호출한다고 가정합니다. 이 시점에서 AJAX 요청은 완료되지 않았으므로 'result'는 정의되지 않습니다. –
@RoryMcCrossan 그렇다면 아약스 요청이 완료 될 때까지 어떻게 기다려야합니까? – 2619
'parseXml'에서'getResult' _after_를 호출해야합니다. 'parseXml'을 호출 한 직후 결과를 처리하기 위해 콜백을 전달할 수 있도록 코드를 재구성해야합니다. 나중에 객체를 호출하여 나중에 getter를 호출해야합니다. 이와 같은 "게터"를 갖는 것은 비동기 코드가 구조화 된 방법이 아닙니다. –