2011-02-15 2 views
1

자바 스크립트에 문제가있어 통화가 반환 될 때까지 기다리지 않습니다. 나는 이미 자바 스크립트가 비동기 적이므로이 메서드 호출이 결과를 기다리는 방법을 알고 싶습니다. 첫 번째 두 snipper는 사용자가 업로드 한 이후로 제어 할 권한이 없습니다. 나는 jquery 또는 순수한 자바 스크립트를 사용할 수 있습니다. 미리 감사드립니다! 자바 스크립트가 진행되기 전에 기다리는 중

나는이 자바 스크립트 호출을

var value = somemethod("cmi.location"); 
//This is not getting set since it does not wait. alerts 'undefined' 
alert(value); 

을 가지고 것으로 someMethod는

function somemethod(element){ 
var result; 
result = API1.GetValue(element); 
return result; 
} 

API는 아래의 코드를 수행하여 인스턴스화 윈도우 객체, 아래의 코드 같은 것을 보인다. 이 시점부터 코드 스 니펫에 액세스 할 수 있습니다.

function API(){ 

}; 
API.prototype.GetValue=API_GetValue; 

function API_GetValue(parameter){ 
$.ajax({ 
    type:"POST", 
    async:false, 
    url:"method.do", 
    dataType:"xml", 
    data: {action: 'getValue', parameter: parameter, value: ''}, 
    success:function(data){ 
    //I am getting 0 here 
     return $(data).find('search').text(); 
    } 
}); 
} 

답변

3
function API_GetValue(parameter){ 
var newdata; 
$.ajax({ 
    type:"POST", 
    async:false, 
    url:"method.do", 
    dataType:"xml", 
    data: {action: 'getValue', parameter: parameter, value: ''}, 
    success:function(data){ 
    //I am getting 0 here 
     newdata = $(data).find('search').text(); 
    } 
}); 
return newdata; 
} 

하기이 같은 수행 할 수 있습니다 :

var API1 = new API(); 

API는 다음과 같습니다 자바 스크립트의 객체 인 나는 이미이 시도

function API_GetValue(parameter){ 
var newdata = $.ajax({ 
    type:"POST", 
    async:false, 
    url:"method.do", 
    dataType:"xml", 
    data: {action: 'getValue', parameter: parameter, value: ''} 
}).responseText; 
return $(newdata).find('search').text(); 
} 
+0

을하지만 여전히 않습니다 작동하지. 다시 시도해 볼게 왜 이것이 효과가 있다고 생각하는지 알려주시겠습니까? – mezzie

+1

때문에 ajax 호출 외부에서 데이터를 보유 할 변수를 선언해야합니다. 어쩌면 당신의 문제는 여전히 $ (data) .find ('search')에 있습니다. 응답이 정확히 어떨까요? –

+1

이 기능은 작동하지만 ** 동기 호출로 설정 되었기 때문에 **에만 ** 작동합니다. – Pointy

관련 문제