2013-06-16 2 views
0

AJAX 요청을 받았고 응답을받은 후 코드를 수행하려고합니다. 그것을 위해 내가 콜백 함수를 시도 :JavaScript 콜백 함수

AJAX를

 function some_function(callback) { 
     var mydateArray=[]; 
     Ext.Ajax.request({ 
      method: "POST", 
      url: url_servlet+"/dateIntensityJson.jsp", 
      success: function(response){ 
       jsonObject = JSON.parse(response.responseText); 
       mydateArray = jsonObject.data;    
      } 
     }); 
     callback(mydateArray); 
    } 

내 기능 :

 function intWinCreate(dateArray){ 
      ...some code... 
      } 

호출 기능 :

some_function(intWinCreate(dateArray)); 

그리고 내가 얻을 오류 :

ReferenceError: dateArray is not defined 

콜백이 잘못 되었습니까? 그리고 i do not use jQuery. 이 실행 있어요 있도록 아약스 응답을 수신 한 후

+0

멋진 세계 ** async **에 오신 것을 환영합니다! 너는 그렇게 할 수 없다. – SLaks

답변

3
, 당신은 아약스 메서드에 전달하는 콜백 내부에 callback 전화를 이동

: 성공 기능이 실행되기 전에

Ext.Ajax.request({ 
     method: "POST", 
     url: url_servlet+"/dateIntensityJson.jsp", 
     success: function(response){ 
      jsonObject = JSON.parse(response.responseText); 
      mydateArray = jsonObject.data;    
      callback(mydateArray); 
     } 
    }); 

은 지금, 당신은 callback(mydateArray) 실행.

Mattias가 지적한 것처럼, 함수를 콜백하지만 함수 호출의 결과로 전달하지 않는 것처럼 보입니다. 당신은 아마 이런 some_function를 호출 할 :

some_function(intWinCreate); 
+2

또한, 호출은'some_function (intWinCreate (dateArray)) '대신'some_function (intWinCreate)'이어야합니다. 당신은 함수를 넘겨 주거나 * 호출하지 않고 * 결과 *를 전달한다. –

+0

@dystroy : 콜백을 성공 안에 넣지 만 도움은 안된다. 이제 귀하의 의견을보십시오. 함수 intCreateWin ~ 60 코드 줄 내 질문에 같은 임 함수를 호출하십시오. –

+0

Ext를 모르지만 응답을 구문 분석해야합니까? –

3

당신은 AJAX가 무엇인지 오해 것 같다. 첫 번째 A 문자의 의미는 다음과 같습니다 : 비동기. 즉, 요청이 즉시 전송되고 Ext.Ajax.request 함수가 즉시 반환됩니다. 이 AJAX 호출의 결과는 훨씬 나중에 나타날 수 있습니다. 따라서 AJAX 함수를 호출 한 직후에이 mydateArray을 사용할 것으로 기대할 수는 없습니다. 당신이 AJAX 호출의 결과를 활용할 수있는 유일한 안전한 장소 콜백 자체 내부 :

Ext.Ajax.request({ 
    method: "POST", 
    url: url_servlet+"/dateIntensityJson.jsp", 
    success: function(response){ 
     jsonObject = JSON.parse(response.responseText); 
     callback(jsonObject); 
    } 
}); 

가이 안에 만 있기 때문에 당신은 우리가 AJAX 성공 콜백 내부의 콜백을 호출이 예에서 볼 수 있듯이 함수를 호출하여 AJAX 호출을 사용할 수 있습니다.