// Best score getters/setters
LocalStorageManager.prototype.getBestScore = function () {
jQuery.when(jQuery.ajax({
url: request_uri+'index.php',
type: 'POST',
async: false,
data: {
module: 'yakjunmo',
act: 'dispYakjunmoGetgamedata',
gubun: '0'
},
dataType: 'json',
contentType: 'application/json'
}))
.done(function (data) {
console.log(data.result);
return data.result || 0;
});
};
제가 지금 2048이라는 게임을 xe에 디비연동하려고 합니다.
해당코드는 디비에 기록된 베스트 스코어를 가져와서 리턴하는 것인데,
이렇게 하면 아무것도 리턴이 안되어 버립니다.
구글링해보니 ajax통신은 기본이 비동기화라서 데이터값을 리턴받을때까지 기다리지 않고 진행되기때문에 그렇다고 하여
동기화 옵션을 추가하면 된다고 했는데, async 옵션을 넣어도 여전히 똑같은데요
방법이 없을까요 ?
약사이다
Lv. 4
댓글 9
ajax 요청 결과는 return하지 않고 콜백 함수(done에 정의한 함수)에서 직접 처리하고 마무리하는 것이 정석입니다.
XE 액션이라면 ajax를 직접 실행하지 말고 XE에서 제공하는 exec_json 함수를 사용해 보세요.
exec_json('모듈명.액션', { 데이터 }, function(data) {
// 결과 받아서 처리
});
LocalStorageManager.prototype.getBestScore도 아무 것도 반환할 수가 없겠죠.
먼저 가져온 후에 결과를 어딘가의 변수에 저장해 놓고
LocalStorageManager.prototype.getBestScore에서는 그 변수값을 읽어 반환하도록 하거나
아무튼 뭔가 순서를 바꿔야 할 것 같습니다.
이것만 지금 3일째 붙잡고 있습니다. 어휴..
다른 언어를 쓰던 사람이 처음 접하면 "이게 뭥미?" 이러기 딱 좋지요 ㅠㅠ
대신 curl 에 다가 리퍼러 넣고 전송해 보세요.
이도 저도 다 안된다면 config.user.inc.php 파일 만들어서 $_SERVER['HTTP_REFERER'] 강제로 입력해 버리셔요....