2013-12-15 3 views
1

문자열을 변수에 할당하고 반환하는 문제가 있습니다. 그것은 간단하게 들리 겠지만, 왜 일어나고 있는지에 관해서는 완전히 잃어 버렸습니다. 내 코드 :자바 스크립트 문자열 할당 문제

function drawpills() { 
    var picid; 
    $.post('js/fetchdata.php', function (data) { 
     var clock = document.getElementById('clock'); 
     clock.innerHTML = "<img src='images/clock/pill.png' alt='pill_image' id='pillpic" + data + "'/>"; 
     picid = "pillpic" + data; 
     alert(picid); //if i run it here i get pillpic31 which is what i want 
    }); 
    alert(picid); //if i run it here i get undefined which is not what i want and which is what is being returned 
    return picid; 
} 

나는 각각의 라인에 대한 의견과 문제를 강조했다. 도움이 필요합니다.

+1

이 정상 동작입니다. 요청이 완료되면 Ajax 요청은 비동기 적이며 콜백 함수를 실행한다는 점을 명심하십시오. – VisioN

+2

방문 http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – Satpal

+0

이것은 내 대답입니다. 감사합니다. – Ben

답변

2

의견에 링크 된 기사를 읽으십시오.

function drawpills(callback){ 
    var picid; 
    $.post('js/fetchdata.php', function(data){ 
     var pcid = data; // process pcid here 
     callback(pcid); 
    }); 
} 
0

문제는 AJAX의 비동기 동작입니다 : 당신이 필요로하는 무엇

이 같은 것입니다. AJAX 응답이 전송되면 호출이 실행을 종료했는지 여부에 관계없이 다음 명령문으로 이동합니다. 이제 두 가지 중 하나를 수행 할 수 있습니다. AJAX를 동기식으로 만들면 페이지의 이벤트 타이밍이 깨지거나 AJAX 호출이 완전히 끝날 때 실행될 콜백을 만들 수 있습니다.

0

$ .post 콜백 때문에 비동기 기능입니다 :

function drawpills(){ 
    var picid; 
    var callback = function(data){ 
    var clock = document.getElementById('clock'); 
    clock.innerHTML="<img src='images/clock/pill.png' alt='pill_image' id='pillpic"+data+"'/>"; 
    picid="pillpic"+data; 
    alert(picid); 
    } 
    $.post('js/fetchdata.php', callback); 
    //picid is undefined,because callback is running until server response data. 
    //unless you using synchronous request 
    alert(picid); 
    return picid; 
}