저는 현재 restfull 서비스의 데이터에 액세스하기 위해 많은 ajax 요청을 사용하는 프로젝트를 진행하고 있습니다. 일부 조작에는 다중 순차 호출이 필요합니다. 최대한 빨리 이들 중 첫 번째를 구현하면 경쟁 조건이 발생했습니다. (ajaxCall_1을 호출 한 다음 ajaxCall_1을 호출 한 결과, ajaxCall_1을 반환하지는 못했습니다). 물론 .success 속성을 사용할 수는 있지만 그건 저를위한 속임수가 아닙니다. 아래의 간단한 예제를 통해 설명하겠습니다. 나는 포함은 .js 파일을 가지고 :JQuery 약속 질문
function getServerBoolean(){
$.get('url_1',function(data){return data)});
}
function refreshWidget(){
$.get('url_2',function(data){
var serverBoolean = getServerBoolean();
--do some html building here based on boolean returned from server-- }
);
}
function setServerValue(newValue){
$.post('url',{key:newValue},function(data){
// server model has changed, so refresh widget.
refreshWidget();
});
}
내가 ('someValue와') setServerValeu를 호출 할 때마다, 위젯 자체를 새로해야하지만이 작업을 수행하기 전에 서버 부울 값을 알 필요가있다. 이런 식으로 나는 더 많은 siutations을 가지므로, 단순히 메소드의 인자로 콜백을주고, .success()에서 호출하면 나에게 트릭을주지 않는다.
나는 $ .when $ .then $ .done 메소드를 발견했지만 자신의 상황에서 어떻게 사용하는지 모르겠습니다. 이걸 어떻게 설정할 수있는 사람이 있습니까?
미리 감사드립니다.
리처드
왜 .success()를 사용하여 ajaxCall_2가 포함 된 함수를 호출 할 수 없습니까? –
서버에 대한 많은 rest/ajax 호출을 포함하는 API가 있습니다. 이러한 메서드를 사용하여 콜백을 사용하려면 콜백이 포함 된 여러 중첩 된 호출이 끝날 것이므로 코드 유지 관리로 인해 원하는 것은 아닙니다. 그 다음으로 매개 변수로 콜백 함수를 허용하는 모든 메서드를 변경해야 할 것입니다, 이것은 또한 내가 원하는 것이 아닙니다, 가능한 API를 깨끗하게 유지하고 싶습니다. $ .when(). 그러면 완벽하게 처리됩니다. (그리고 그것은 나를 위해 매력처럼 작동합니다) – Bjarne77