ajax 타이밍을 조절하고싶습니다.ㅠㅠ 채택완료
회원가입 스킨의 register_form.skin.php 파일에서 회원가입 버튼을 클릭하면
회원아이디검사, 비밀번호 체크등을 하기 위해서
function fregisterform_submit(f) 자바스크립트를 실행되는데요?
해당 자바스크립트 부분에 하나의 검사를 하는 구간이 더 필요해서 ajax로 제가 필요로하는
검사하는 스크립트를 만들어서 넣었습니다.
</p>
<p>function fregisterform_submit(f) {</p>
<p>...........</p>
<p> // 회원아이디 검사
var result = "";
$.ajax({
dataType:"jsonp",
jsonp:"callback",
url: "<a href="http://xxx.com/api/ajax.mb_id.php"," target="_blank" rel="noopener noreferrer">http://xxx.com/api/ajax.mb_id.php",</a>
data: {
"reg_mb_id": encodeURIComponent($("#reg_mb_id").val())
},
cache: false,
async: false,
success: function(data) {
result = data;
console.log(result);
},
error:function(data){
alert('회원아이디 오류 입니다.');
},
complete:function(d){
$("input[name=result").remove();
var idx = $('<input type="hidden" value="'+result.result+'" name="result">');
$('#fregisterform').append(idx);</p>
<p> if(result.result == 'success') {
alert("회원가입이 가능함");
return true;
} else {
alert("다른 사이트에 아이디가 존재함");
return false;
}
},
});</p>
<p> </p>
<p><span style="background-color:#c0392b"> var ajax_msg = $('input[name=result]').val();</span>
<span style="background-color:#c0392b"> if (ajax_msg == 'success') {</span>
<span style="background-color:#c0392b"> return true;</span>
<span style="background-color:#c0392b"> } else {</span>
<span style="background-color:#c0392b"> alert("B사이트에 존재하는 회원입니다.");</span>
<span style="background-color:#c0392b"> f.mb_id.select();</span>
<span style="background-color:#c0392b"> return false;</span>
<span style="background-color:#c0392b"> }</span></p>
<p>...........</p>
<p><?php echo chk_captcha_js(); ?></p>
<p>document.getElementById("btn_submit").disabled = "disabled";</p>
<p>return true;</p>
<p>}</p>
<p>
ajax의 complete 부분에
해당 회원가입
답변 3개
작성하신 함수의 순차적인 흐름을 타지 않는 것은 jQuery ajax 가 의 독립된 객체이기 때문입니다.
좀더 쉽게 이해를 하자면, function 내부에 ajax 는 독립된 하나의 실행객체로 보면 될 것 같습니다. (ajax 뒤의 코드는 ajax 실행 여부(success, complete, error 등)와 관계없이 바로 실행됩니다. 작성하신 코드를 리뷰하면 서버와의 통신 속도에 따라, ajax 의 결과를 토대로 실행될 수도/안될수도 있습니다.)
그렇기 때문에, ajax 밖의 코드를 순차적으로 실행하고 싶으시다면, 코드가 ajax 안으로 들어가야 합니다.
더 좋게는 complete 부분에서 원하는 로직을 실행하기 보다는 success 에서 실행하는게 좋습니다.
complete 는 success 와 error 모든 경우에 실행되며, success 의 로직이 실행되기 전 ajax 의 data 를 받으면 바로 complete 되기 때문입니다.
굳이 함수가 밖에서 실행되야 한다면, ajax 의 success 를 감지할 수 있도록 setTimeout 이나 setInterval 등으로 감싸야 할 것 같습니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
ajax 의 complete 부분에서 결과값을 넣고,
그 결과값을 검증하는 부분이 있는데,
ajax 밖에서 다시 검증을 하는거죠?
이해가 잘 안되네요?
complete 부분에서 순차적으로 원하시는 부분을 진행해야 합니다.
혹시 코드가 길다면, 함수를 만들고 그 함수를 complete 부분에서 호출하면 됩니다.
답변이 됬는지 모르겠네요..^^
답변에 대한 댓글 1개
아작스가 종료되고 다음 스크립트로 넘어가더군요
왜인지 모르겠지만... 그래서 부득이하게 한번더 검증을 하게되었어요
댓글을 작성하려면 로그인이 필요합니다.
그누보드 원본에 있는 것처럼 리턴값을 받아서 처리하도록 하면 될텐데요?
위 소스에서는 complete내에서 아래쪽에 넣어야겠죠
그런데 complete에 체크 및 경고창 띄우는 내용이 있는데 2중으로 저렇게 하는 이유라도??
하여튼 위 소스처럼 하지말고 그누보드 원본그대로의 방법으로 응용하면 됩니다
답변에 대한 댓글 1개
아작스가 종료되고 다음 스크립트로 넘어가더군요
왜인지 모르겠지만... 그래서 부득이하게 한번더 검증을 하게되었어요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
기존 회원가입 버튼을 실행시 submit이 되어 마지막 검증 스크립트를 실행하는 구간에
ajax를 넣었었는데
이부분을 일반 버튼으로 교체하고
클릭시 ajax를 실행하고
ajax의 complete 부분에서 결과값에 따라서
옮다면 submit버튼을 실행하도록 구현하였습니다.
그러니까 해결이 되었네요
도움 얻었습니다. 감사합니다.