2012-11-27 2 views
4

서버에서 값을 가져 오기 위해 AJAX를 사용하고 있으며 비동기식으로 처리하고 있습니다. 어떻게 AJAX 요청이 끝날 때까지 기다리는 것을 멈출 수 있습니까? 이건 내 코드입니다 : 내가 기다려야하는 기능을 작성해야합니다 생각AJAX 응답을 기다리는 동안 객체 채우기

var response = {} 
for (var i = 0; i < length; i++){ 
     $.ajax({ 
      url : url[i], 
      dataType : 'json' 
     }).success(function(result) { 
      processResult(result); 
     }) 
} 

하지만 제대로 작동하지 않습니다

function wait() { 
    for (var name in response) { 
     if (response[name] === undefined) { 
      setTimeout(function() { 
       wait() 
      },50) 
     } 
    } 
    processResult(); //this is function where I will process my AJAX result 
} 

은 누구도 날 도와 드릴까요?

+0

아약스가로드되는 동안 코드가 실행되는 것을 의미합니까? 성공 처리기의 아무 것도 아약스 요청이 끝날 때 호출됩니다. 성공 처리기 내에서 processResult()를 호출하면됩니다. – Alex

+0

알 수 없습니다. 성공 안의 함수는 요청이 no 일 때만 호출된다고 가정한다. –

+0

은 범위 문제와 비슷합니다. 변수를 함수로 선언 해 봅니다. var wait = function ... – dmi3y

답변

1

좋아요. 알아 냈습니다. ajaxComplete이후에 출시되기 때문에 모든 요청이 완료 될 때까지 기다릴 기능을 생성해야만하기 전에 모든 단일 AJAX 요청이 발생했습니다. 그래서 이런 식으로했다 :

function callAJAX(url){ 
      $.ajax({ 
       url : url[i], 
       dataType : 'json' 
      }).success(function(result) { 
       processResult(result); 
      }) 
} 

_wait4ajax 기능 곳이다 :

var response = {} 
for (var i = 0; i < length; i++){ 
     $.ajax({ 
      url : url[i], 
      dataType : 'json' 
     }).success(function(result) { 
      processResult(result); 
     }) 
} 

에 :

response = {} 
    for (var i = 0; i < length; i++){ 
     callAJAX(url[i]); 
    } 
_wait4ajax(); 

기능 callAJAX이 같다

나는 내 기능 변경 개체의 모든 속성이 undefined이 아닌지 확인합니다. (나는 객체에 채워 져야 속성의 목록을 가지고있다 -이 속성은 내 프로젝트의 실제 코드와이 사이트의 목적을 위해 만들어 내 의사 코드()를 엉망

function _wait4ajax(){ 
     var controlArray = [], self = this; 

     var length = this.visibleLayers.length; 
     for (var i = 0; i < length; i++) { 
      if (this.cachedFeatures[this.visibleLayers[i]] === undefined) { 
       controlArray.push('false'); 
      } else { 
       controlArray.push('true'); 
      } 
     } 
     if (controlArray.indexOf('false') != -1) { 
      setTimeout(function() { 
       self._wait4ajaxComplete(); 
      }, 50); 
     } else { 
      //AJAX has ended - Object is ready 
     } 
} 

visibleLayers 배열에, 그래서 아마이 양식에서 작동하지 않습니다,하지만이 주제의 구체적인 아이디어를 지정하고 싶습니다. 이 게시물을 편집하려면 자유롭게 기입하십시오. :)

0

당신이 원하는 것을 할 것입니다이 질문에 대한 대답 :

How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

귀하의 코드 :

는 대답은 아마로
var response = {} 
for (var i = 0; i < length; i++){ 
     $.ajax({ 
      url : url[i], 
      dataType : 'json', 
      async: false, 
      success: function(result) {     
       processResult(result); 
      } 
} 
+0

아약스가 완료 될 때까지 애플리케이션이 정지하기 때문에 동기화 모드에서는이 작업을 수행 할 수 없습니다. 피하고 싶다. – Krystian

1

, 내가 여기에 게시합니다. 난 당신이 찾고있는 생각 :

http://api.jquery.com/ajaxComplete/

당신은 응답 뭔가를 다음 아약스가 모두 완료되면 찾아 이것을 사용할 수 있습니다.

+0

내가 아약스 요청이 끝날 때까지 기다리는 데 어떻게 사용할 수 있습니까? – Krystian

관련 문제