반응형
for loop에서 ajax 콜백 함수로 인덱스 전달(JavaScript)
ajax 콜을 둘러싼 for 루프가 있어 for 루프에서 callback 함수로 인덱스를 전달하기 위한 최적의 방법을 결정하려고 합니다.코드는 다음과 같습니다.
var arr = [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010];
for (var i = 0; i < arr.length; i++)
{
$.ajaxSetup({ cache:false })
$.getJSON("NatGeo.jsp", { ZipCode: arr[i], Radius:
document.getElementById("radius").value, sensor: false },
function(data)
{
DrawZip(data, arr[i]);
}
);
}
현재 arr 배열의 마지막 값만 비동기 Ajax 호출로 전달됩니다.arr 배열의 각 반복을 콜백 함수에 전달하려면 ajax 콜을 동기화하는 것 외에 어떻게 해야 합니까?
Javascript closure를 사용할 수 있습니다.
for (var i = 0; i < arr.length; i++) {
(function(i) {
// do your stuff here
})(i);
}
아니면 그냥 사용하셔도 됩니다.$.each
:
var arr = [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010];
$.each(arr, function(index, value) {
$.ajaxSetup({ cache:false });
$.getJSON("NatGeo.jsp", { ZipCode: value, Radius:
document.getElementById("radius").value, sensor: false },
function(data) {
DrawZip(data, value);
}
);
});
@Anurag 목록에 있는 30개의 질문을 모두 읽은 것은 아니지만, 다음과 같은 콜백 구문이 효과가 있는 것 같습니다.
(function(year) {
return (function(data) {DrawZip(data, year);});
})(arr[i])
이것이 원본을 대체한다.function(data)
덧붙여서, 결과는 비동기 응답에 의해 랜덤 순서로 되어 있습니다.
여기에서 John Resig가 언급한 for-loop 대괄호도 생략할 수 있습니다. 이 방법이 더 읽기 쉽다고 생각합니다.
for (var i = 0; i < arr.length; i++) (function(i) {
// async processing
setTimeout(function(){
console.log(i);
}, i * 200);
})(i);
언급URL : https://stackoverflow.com/questions/6077357/passing-index-from-for-loop-to-ajax-callback-function-javascript
반응형
'programing' 카테고리의 다른 글
Woocommerce: 사용자 입력에 따른 맞춤 가격 (0) | 2023.04.02 |
---|---|
각도 지시어 다른 템플릿 (0) | 2023.04.02 |
'../build/Release/bson' 모듈을 찾을 수 없습니다. 코드: 'MODULE_NOT_FOUND' } js-bson:순수 JS 버전을 사용하여 c++ bson 확장을 로드하지 못했습니다. (0) | 2023.04.02 |
Angular 1.5, 부모 컨트롤러에서 컴포넌트의 함수를 호출합니다. (0) | 2023.04.02 |
모든 Axios 요청에 대한 Authorization 헤더 첨부 (0) | 2023.04.02 |