2012-03-16 5 views
0

서버에 대한 ajax 호출을 작성하고 응답을 사용하여 기존 문서 컨텐츠의 섹션을 대체한다고 가정합니다. 다른 방법보다이 방법들 중 하나를 선택해야 할 이유가 있을까요?jQuery - replaceWith와 ajax 호출의 차이점

옵션 1 - ajax 호출을 작성하고 오류/성공 함수에서 replaceWith를 수행하십시오. 예 :

$.ajax({ 
     type  : 'GET', 
     url  : '/some/path/here', 
     success : function(data) { 
     // process data here 
     $('#container').replaceWith(processedData); 
     } 
}); 

옵션 2 - 아약스 호출을 함수에 전달 replaceWith를 호출합니다. 예 :

$("#container").replaceWith(function(){ 
    var responseData; 
    $.ajax({ 
     type  : 'GET', 
     url  : '/some/path/here', 
     success : function(data) { 
     // process data here 
     responseData = processedData; // 
     } 
    }); 
    return responseData; 
}); 
+0

ProcessedData이 값을 지정하지 않습니다 : 당신이 AJAX 호출에서 반환 된 데이터의 처리를 외부화 찾고 있다면

은, 당신이 실행하려는 기능에 대한 참조로 success 매개 변수를 설정합니다. –

답변

4

두 번째 것은 옵션이 아닙니다. 당신이 기능을 꺼낼 때;

function(){ 
    var responseData; 
    $.ajax({ 
     type  : 'GET', 
     url  : '/some/path/here', 
     success : function(data) { 
     // process data here 
     responseData = processedData; // 
     } 
    }); 
    return responseData; 
} 

이것은 undefined을 반환합니다. 시간 함수가 실행되어 반환 될 때 reponseDataundefined입니다. 단지 언젠가 미래에 success 함수가 실행되고 responseData을 설정합니다. 그러나 코드 replaceWith은 이미 실행이 완료되었습니다. 호출이 비동기 적으로 실행하는 것처럼 옵션이 작동하지 않을 같은 옵션 1.

+0

도움 주셔서 감사합니다. – csturtz

2

옵션 1

이동, 유일한 선택입니다. 즉, 함수가 아무 것도 반환하지 않는다는 의미입니다.

$.ajax({ 
    type: 'GET', 
    url: '/some/path/here', 
    success: processData 
}); 

function processData(data) { 
    // process data here 
    $('#container').replaceWith(data); 
} 
+0

도움 주셔서 감사합니다! – csturtz

관련 문제