2014-06-17 3 views
2

여기 상황이 약간 이상하고 도움이 필요합니다. 다음은 내 코드의 예입니다.ExtJS 4는 콜백을 사용하지 않고 AJAX 요청의 결과를 기다리고 있습니다.

fn: function() { 
    var test = this.ajaxFunction(); 
    alert(test); 
} 

ajaxFunction : function() { 
    Ext.Ajax.request ({ 
     url: 'MyServlet', 
     params: ..., 
     success: function (response) { 
      response = Ext.decode(response.responseText); 
      return response.myVar; 
     } 
    }); 
} 

분명히 경고는 myVar 값 대신 정의되지 않은 결과를 제공합니다. 이 문제를 어떻게 해결할 수 있습니까? Ext의 AJAX는 비동기 적으로 지원되며 모든 사람을 검색 할 때 콜백에 내 post-Ajax 로직을 넣으라고 알려줍니다. 그러나 여기서 볼 수 있듯이 그것은 불가능합니다. fn과 ajaxFunction 함수가 필요합니다. ajaxFunction은 많은 다른 함수에 의해 호출되므로 별도로 존재해야합니다.

"비동기"구성을 시도했지만 제대로 작동하지 않습니다. 나는 그들이 ExtJS 4.2.1에서 그것을 제거했다고 생각한다.

아이디어가 있으십니까?

답변

3

당신은 ajaxFunction에 콜백 함수를 전달할 수 :

fn: function() { 
    this.ajaxFunction(function(response) { 
     alert(response); 
    }); 
} 

ajaxFunction : function (callback) { 
    Ext.Ajax.request ({ 
     url: 'MyServlet', 
     params: ..., 
     success: callback 
    }); 
} 

당신이 ajaxFunction를 다시 사용할 수있는이 방법은, 단지 다른 콜백을 매번 전달합니다.

+0

'var test = this ....'테스트에 의미있는 가치가 있다고 생각합니까? –

+1

@SunnyRGupta 사실, OP 코드를 편집 할 때 간과 할 수 없습니다. 지금 그것을 제거했습니다. –

+0

음,이 방법은 직장 동료에 의해 제안되었으며, 나는 다소 효과가 있었지만 이상하게 보였다. 나는 AJAX를 개념적으로 처음 접했고 절차 적 프로그래밍 방식이 혼란스러워지고 있습니다. 일이 진행되는 방식은 일반적으로 다음과 같습니다. 데이터를 가져 와서 (아약스 또는 다른 방법으로) 그 데이터에 대해 작업하십시오. 그러나 Async AJAX를 사용하면 ajax를 함수 호출로 간주 할 수 없습니다. 그것은 저를 괴롭히는 것입니다. 그리고 그것이 제가 성취하려고하는 것입니다. Ajax 요청을 보내고 우리가 원하는 데이터를 얻은 후에 만 ​​프로그램을 계속 호출하게하는 함수 호출을 만듭니다. – Konstantine

관련 문제