ajax 타이밍을 조절하고싶습니다.ㅠㅠ

ajax 타이밍을 조절하고싶습니다.ㅠㅠ

QA

ajax 타이밍을 조절하고싶습니다.ㅠㅠ

본문

회원가입 스킨의 register_form.skin.php 파일에서 회원가입 버튼을 클릭하면

회원아이디검사, 비밀번호 체크등을 하기 위해서 

function fregisterform_submit(f) 자바스크립트를 실행되는데요?

해당 자바스크립트 부분에 하나의 검사를 하는 구간이 더 필요해서 ajax로 제가 필요로하는

검사하는 스크립트를 만들어서 넣었습니다.


function fregisterform_submit(f) {
...........
    // 회원아이디 검사
    var result = "";
    $.ajax({
        dataType:"jsonp",
        jsonp:"callback",
        url: "http://xxx.com/api/ajax.mb_id.php",
        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);
            if(result.result == 'success') {
                alert("회원가입이 가능함");
                return true;
            } else {
                alert("다른 사이트에 아이디가 존재함");
                return false;
            }
        },
    });
 
    var ajax_msg = $('input[name=result]').val();
    if (ajax_msg == 'success') {
        return true;
    } else {
        alert("B사이트에 존재하는 회원입니다.");
        f.mb_id.select();
        return false;
    }
...........
<?php echo chk_captcha_js();  ?>
document.getElementById("btn_submit").disabled = "disabled";
return true;
}

 

ajax의 complete 부분에

해당 회원가입 <form> 안에 <input> hidden을 생성하고 거기의 value를

ajax에서 가져온 결과값을 넣었습니다.

동적으로 <input>이 생성되는 것과 value에도 원하는 값이 잘 들어옵니다.

한가지 안되는부분이

 

ajax가 끝나고 바로 input name이 result라는 인풋의 value를 가지고 체크하는 부분이 있는데

(이 부분이 실제 ajax결과를 name = result 라는 동적으로 생성한 input의 값)

이 부분이 ajax가 통신을 하고 complete에서 <input>을 생성하는 도중 실행이 되어서

저기 스크립트 부분에서 원하는데로 검증이 되지 않습니다.ㅠㅠ

 

ajax를 완료하고 해당 input의 값으로 검증하는 부분을 실행시키려면 어떤 방법이있나요?

 

이 질문에 댓글 쓰기 :

답변 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 등으로 감싸야 할 것 같습니다.

감사합니다.
기존 회원가입 버튼을 실행시 submit이 되어 마지막 검증 스크립트를 실행하는 구간에
ajax를 넣었었는데
이부분을 일반 버튼으로 교체하고
클릭시 ajax를 실행하고
ajax의 complete 부분에서 결과값에 따라서
옮다면 submit버튼을 실행하도록 구현하였습니다.
그러니까 해결이 되었네요
도움 얻었습니다. 감사합니다.

그누보드 원본에 있는 것처럼 리턴값을 받아서 처리하도록 하면 될텐데요?

위 소스에서는 complete내에서 아래쪽에 넣어야겠죠

그런데 complete에 체크 및 경고창 띄우는 내용이 있는데 2중으로 저렇게 하는 이유라도??

하여튼 위 소스처럼 하지말고 그누보드 원본그대로의 방법으로 응용하면 됩니다

 

complete 부분에서 리턴 false로 하였지만
아작스가 종료되고 다음 스크립트로 넘어가더군요
왜인지 모르겠지만... 그래서 부득이하게 한번더 검증을 하게되었어요

ajax 의 complete 부분에서 결과값을 넣고,

그 결과값을 검증하는 부분이 있는데,

ajax 밖에서 다시 검증을 하는거죠?

이해가 잘 안되네요?

complete 부분에서 순차적으로 원하시는 부분을 진행해야 합니다.

혹시 코드가 길다면, 함수를 만들고 그 함수를 complete 부분에서 호출하면 됩니다.

답변이 됬는지 모르겠네요..^^

complete 부분에서 리턴 false로 하였지만
아작스가 종료되고 다음 스크립트로 넘어가더군요
왜인지 모르겠지만... 그래서 부득이하게 한번더 검증을 하게되었어요

답변을 작성하시기 전에 로그인 해주세요.
전체 16,737
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT