노무현 대통령 배너

JavaScript에서 '동기화' -_-

jQuery의 each와 post를 쓰는데 한가지 문제점이 발생했다.

function testAjax(){
    var i=0;
    $('.test').each(function(i){
        $.post('test.php'.{mode:'test'},function(data){
            if(data=='SUCCESS') i++;
        });
    });
    alert(i);
}


요런식으로 each와 post가 중첩되어 있는 코드였는데,
저 맨 아랫줄의 i는 ajax로 돌아온 값이 SUCCESS더라도 '거의 항상' 0이 된다는게 문제다 -_-;

아마 저 function들 중(post나 each)에서 어떤 녀석이 setTimeOut을 통해서 돌리는게 있다는 건데,


우선 저 each로 돌려야 할 갯수가 몇개인진 분명히 알 수 있는 상태였으므로

function testAjax(count){
    var i=0;
    $('.test').each(function(i){
        $.post('test.php'.{mode:'test'},function(data){
            count--;
            if(data=='SUCCESS') i++;
        });
    });
    while(true){
        if(count==0)break;
    }
    alert(i);
}

이렇게 만들어 보았으나,
JavaScript는 멀티 스레드 체제가 아니었으므로 -_-

count--; 가 실행될 가능성은 0[...]

[애초에 sleep조차 없는 while문이 스핀락이 될 수 있는가도 의문이지만]

따라서 이렇게 해결했다.

function testAjax(count){
    var i=0;
    $('.test').each(function(i){
        $.post('test.php'.{mode:'test'},function(data){
            count--;
            if(data=='SUCCESS') i++;
        });
    });
    var interval=setInterval(function(){
        if(count==0){
            clearInterval(interval);
            alert(i);
        }
    },100);
}


-_-;; 뭐야 이게

by Hide_D | 2010/01/05 05:26 | 컴질 - 프로그래밍 | 트랙백 | 덧글(4)

MySQL Join Query

SELECT l.*,i.name as t_name, c.name as c_name
FROM `midam_lecture` l, `midam_inuser` i, `midam_lecture_category` c
WHERE l.teacher_idx=i.idx AND l.category_idx=c.idx

MySQL에서 여러 테이블의 데이터를 조합할때 쓰는 구문

by Hide_D | 2009/12/25 14:37 | 컴질 - 프로그래밍 | 트랙백

WebMail Notifier KAIST 메일 스크립트

메일 타고 들어가기 귀찮아서 만들어봤습니다.

Kaist_Webmail.js

WebMail Notifier에서 '사용자 스크립트'를 누른 후 이 파일을 추가하면
카이스트 메일도 확인할 수 있습니다.

by Hide_D | 2009/12/12 16:54 | 컴질 | 트랙백

◀ 이전 페이지          다음 페이지 ▶