2012-04-07 3 views
9

잃어 버렸습니다. 루프 변수를 AJAX .done() 호출에 어떻게 전달할 수 있습니까?

for (var i in obj) { 
    $.ajax(/script/).done(function(data){ console.log(data); }); 
} 

분명히, 내가 매일 반복에 객체 obj에서 맨 마지막 키를 반환 console.log(i+' '+data)내가 작업을 수행하는 경우. 문서화가 실패합니다.

+0

나는'success'을 사용할 수 파악,하지만 난 이해가 지금은 사용되지 않습니다. – philtune

답변

9

당신은이 같은 루프의 각 호출에 대해 i의 값을 캡처 (자체 실행 기능을 통해) 클로저를 사용할 수 있습니다

for (var i in obj) { 
    (function(index) { 
     // you can use the variable "index" here instead of i 
     $.ajax(/script/).done(function(data){ console.log(data); }); 
    })(i); 
} 
+0

클로저 하나의 개념 나는 항상 힘든 시간을 완전히 이해했습니다. 고마워요 @ jfriend00, 나는 그것을 시도! – philtune

+0

그래, 그 일했다. obj [index]도 할 수 있습니다. 다시 한 번 감사드립니다! – philtune

5

당신은 단지 객체에 사용자 정의 필드를 만들 수 있습니다 당신을 $ .ajax()로 보내면 promise 콜백이 만들어지면 "this"의 필드가됩니다. 예를 들어

:

$.ajax( { url: " https://localhost/whatever.php ", method: "POST", data: JSON.stringify(object), custom: i // creating a custom field named "custom" }).done(function(data, textStatus, jqXHR) { var index = this.custom; });

+0

5 년이 지난 후에도 나는이 질문을 던지는 것을 잊어 버렸습니다. ;) – philtune

+0

최근 프로젝트에서이 작업을 수행하는 방법을 알아야했습니다. 그래서, 내가 그것을 알아 냈을 때, 나는 또한 그들이 원하는 정보를 다른 사람들에게 전달하려고 시도했다. –

+0

이것은 jquery ajax 비동기 실행 시점에서 더 낫다. 콜백이있을 때 명확하게 의도 된 항목/객체 참조를 제공한다. 후자를 실행했다. –

관련 문제