2010-07-14 3 views
4

jQuery의 아약스 성공 함수에 대한 매개 변수 : 잘 작동추가 나는이 코드를 사용하여 XML 파일을 가져 오는거야

function getMaps(){ 

    toLoad = loadMaps.length; 

    for (var i = 0; i < loadMaps.length; i++){ 
     $.ajax({ 
      type: "GET", 
      url: loadMaps[i], 
      dataType: "xml", 
      success: processMap 
     }); 
    } 
} 

을,하지만 난 processMap 또 다른 매개 변수 (즉 loadMaps [I], 이름으로주고 싶어 로드 된 xml을 저장할)

전역 변수를 사용하지 않고이 작업을 수행하는 방법을 알아낼 수는 없지만 원하는 것은 아닙니다.

+0

가장 좋은 해결 방법은 실제로 대신 배열에 인덱스를 전달하는, OOP를 사용하는 것 약. :) – WhyNotHugo

답변

4

jQuery 에는 세 가지 매개 변수가 있으며, 변경하거나 확장 할 수 없습니다. 따라서 닫히는 익명의 함수 내에서 함수를 호출해야합니다.

for (var i = 0; i < loadMaps.length; i++){ 
    $.ajax({ 
     type: "GET", 
     url: loadMaps[i], 
     dataType: "xml", 
     success: function(xhr, textStatus, error){ 
      processMap(loadMaps[i]); 
     } 
    }); 
} 
+3

주의하십시오. "i"는 항상 loadMaps.length + 1이어야합니다. "i"변수에 대한 매개 변수가있는 함수에 Ajax 코드를 래핑하십시오. – ggomeze

1
function getMaps(){ 
    toLoad = loadMaps.length; 

    for (var i = 0; i < loadMaps.length; i++){ 
     $.ajax({ 
      type: "GET", 
      url: loadMaps[i], 
      dataType: "xml", 
      success: function() { 
       // do anything 
       processMap(x,y,z,'foo'); 
      } 
     }); 
    } 
} 
+0

ajax 호출에서 오는 매개 변수를 받아 들인다는 것을 기억하십시오.'success : function (data) {' – peirix

1

"나는"성공 이벤트가 발생하지 거의 결코 루프의 다음 반복보다 빠른 발생, 적어도 루프의 마지막 값으로 항상 것을 허용 문제의 문제. 여기

function getMaps(){ 

    toLoad = loadMaps.length; 

    for (var i = 0; i < loadMaps.length; i++){ 
     $.ajax({ 
      type: "GET", 
      url: loadMaps[i], 
      dataType: "xml", 
      success: (function(loadMap){ 
       return function processMap(response){ 
       // code of processMap function ... 
       alert(loadMap); 
       } 
      })(loadMaps[i]) 
     }); 
    } 
} 

이 비슷한 질문의 원래 대답 : 내 경우에 작동 방법은 다음과

이다 how to pass multiple arguments to onSuccess function in Prototype?

관련 문제