[질문] JavaScript 관련.. 2시간 동안 붙잡고 있어요.... ㅜㅜ
글쓴이: blossom24 / 작성시간: 금, 2008/10/10 - 6:44오후
아래의 코드에서요..
리턴값 받아보면.. undefined로.. 나옵니다..
근데.. 이상한건.. 리턴받아서 .get('xx') 첫 번째에서만 undefined 로 나오고..
두번째 부터는 정상적으로 값을 반환합니다..
뭐가 문제인가요??
그리고 onSuccess 함수 내에서 i 를 인자로 설정하고 함수를 호출하면
첫 번째 부터 정상으로 값을 반환하구요..
2시간 동안 .. 같은 코드만 보고 있었네요.. ㅜㅜ; 도와주세요.
var yy = function() { var i = new Hash(); new Ajax.Reqest..(생략).. onSuccess: function(res) { ..(생략).. i.set('xx', 'xx'); ..(생략).. } } // Ajax 끝 return i; }
Forums:
"A"jax는 기본적으로
"A"jax는 기본적으로 비동기(Async)로 동작합니다.
var yy = function() {
var i = new Hash();
new Ajax.Reqest..(생략)..
onSuccess: function(res) {
..(생략)..
i.set('xx', 'xx');
..(생략)..
}
} // Ajax 끝 <-- 서버로의 요청이 끝났을 뿐... 서버의 응답까지 받은 건 아닙니다.
return i;
}
서버의 응답이 아주 빨리 도착해서 return i 하기 전에 onSuccess 핸들러가 실행되었다면
제대로 된 결과를 얻을 "수"도 있습니다.
두번째 부터 결과가 나온다고 하셨는데... 두번째 yy()의 리턴값은 첫번째 ajax 요청의 결과일 가능성이 큽니다.
결론은,
1) 결과를 받는 부분도 비동기로 처리하거나...
2) 동기(sync)로 호출하면 됩니다.
1)이 좋은 방법이지만, 조금 까다롭고, 귀찮습니다.
2)는 만들기는 쉽지만, ajax답지 못하고... UI가 멈칫하는 문제가 있습니다.
1)을 간단히 해보자면:
var yy = function(callbackFunc) {
var i = new Hash();
new Ajax.Reqest..(생략)..
onSuccess: function(res) {
..(생략)..
i.set('xx', 'xx');
..(생략)..
callbackFunc(i); <--- 서버로 부터 받은 응답을 가공(i)해서 콜백함수에 전달
}
} // Ajax 끝 <-- 서버로의 요청이 끝났을 뿐... 서버의 응답까지 받은 건 아닙니다.
return i;
}
yy(function(ret) {
ret.get('xx') ... <-- 여기서 하고 싶은 일을 한다~
});
여러가지 방법이 있겠습니다만..^^ 제일 단순한게 이거네요.
2)의 경우는 간단합니다.
new Ajax.Reqest..(생략).. { asynchronous: false <-- 요 옵션을 추가해주시면 됩니다.
http://www.prototypejs.org/api/ajax/options 참조하세요
그나 저나... kldp에서 질문에 답변 달아본 게 얼마만인지... ㅎㅎ
----
the smile has left your eyes...
----
the smile has left your eyes...
아.. 고맙습니다..
아.. 고맙습니다.. ^^;
그렇군요.. return 이 더 빨리 실행되네요..
개념없이 하다보니까.. 이렇게 문제에 부디치네요..
댓글 달기