2009-09-09 4 views
2

여기에 무슨 일이 일어나고 있는지 누군가가 도울 수 있기를 기대하고 있었기 때문에 나는 쉽게 빠져있는 것이 확실합니다.Javascript 함수 JQuery POST를 사용하면 항상 정의되지 않음

나는 그 안에 JQuery 포스트가있는 자바 스크립트의 함수를 가지고있다. 게시물의 결과를 텍스트로 반환하여 변수에 넣고 싶습니다. 번호가 게시물에서 올바르게 반환되지만 변수에 넣을 때 변수에 "정의되지 않음"이 표시됩니다. 어떤 아이디어?

var total = GetTotalSize(); 
alert(total); 

function GetTotalSize(){ 
    var i = ""; 
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){ 
     i = data.toString(); 
     return i; 
    }); 
} 

답변

6

이렇게하면 안됩니다. AJAX의 "A"는 "비동기"를 의미합니다. $.post()에 제공하는 콜백 함수는 GetTotalSize()이 실행되고 반환 된 후에 잘 실행됩니다.

이 문제를 해결하려면 코드를 재구성해야합니다. 나머지 코드가 어떻게되는지 모르겠으므로 추천 할 수는 없지만 여기에는 가능성이 있습니다.

$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data) 
{ 
    doSomethingWithTotalSize(data.toString()); 
}); 

function doSomethingWithTotalSize(totalSize) 
{ 
    // whatever 
} 
1

문제는 사용자가 i을 콜백 기능 외부로 반환한다는 것입니다. 기본적으로 i을 반환하면 해당 내용이 아직 존재하지 않으며 서버가 콜백 함수에 데이터를 반환 할 때까지 존재하지 않습니다.

+0

감사를보십시오! 귀하의 제안을 시도하고 예제 코드를 업데이트했지만 여전히 다른 문제가 있습니까? – Jon

2

베드로는 전적으로 옳습니다,하지만 당신은 async: false을 전달하여 동 기적으로 작동하도록 $ 아약스 방법을 강제 할 수 있습니다.

0

나는 이것이 이전 게시물이라는 것을 알고 있지만 나를위한 해결책은 success 대신 complete:[delegate]을 사용하는 것이 었습니다. 이렇게하면 callback이 완료됩니다.

1

는 빠른 응답이

function GetTotalSize(callback) {  
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) { 
     callback(outputData); 
    }); 
} 

function DoSomething(data) 
{ 
    //.... 
} 

GetTotalSize(DoSomething); 
관련 문제