2009-07-24 6 views
4

저는 Prototype 라이브러리를 사용하는 초심자입니다. Prototype의 onSuccess/onFailure 함수에 여러 인수를 전달할 수있는 방법을 알고 싶습니다. 예를 들어 : - 나의 성공 기능 fnSccs에서Prototype에서 onSuccess 함수에 여러 인수를 전달하는 방법은 무엇입니까?

new Ajax.Request('testurl',{ 
     method: 'post', 
     parameters: {param1:"A", param2:"B", param3:"C"}, 
     onSuccess: fnSccs, 
     onFailure: fnFail 
     }) 

: - 나는 fnSccs 기능에 새로운 인수를 전달하려는

function fnSccs(response) 
{ 
    alert(response.responseText); 
} 

. 어떻게 가능합니까? 어떤 도움을 주셔서 감사합니다.

답변

7

당신이 원하는 매개 변수를 받으면에 다른 하나에 당신의 성공 기능을 포장, 다시 기존 기능을 반환 할 수 :

new Ajax.Request('testurl',{ 
       method: 'post', 
       parameters: {param1:"A", param2:"B", param3:"C"}, 
       onSuccess: mySuccess('myValue1', 'myValue2'), 
       onFailure: fnFail 
       }) 

function mySuccess(param1, param2){ 
    return function(response){ // Your old success function 
    alert(param1); // The parameter still accessible here 
    alert(param2); 
    alert(response); 
    } 
} 

어떤 일이 것은 당신이 mySuccess(...) 호출 할 때 이전 함수가 반환됩니다,하지만 여전히 변수가 외부 closure에 할당 된 채 남아 있기 때문에 매개 변수에 액세스 할 수 있습니다.

실행중인 스 니펫 here을 확인할 수 있습니다.

+0

단순 폐쇄가 트릭을했을 때 왜 함수를 만들겠습니까? onSucess : 함수 (응답) {myNextStep (응답, 'a', b '); } – epascarello

+0

@epascarello : OP가 * 매개 변수 전달 *을 요청했기 때문에 ... – CMS

+0

은 요청이 전송되기 전에 새로운 Ajax.Request()에서 두 번째 인수를 생성하는 순간 여기에서 실행되지 않는 mySuccess()입니다. ? 나에게 그것은 'onSuccess'키에 단지 mySuccess의 반환 값이 할당되어있는 것으로 보이는데 이는 정의되지 않았습니다 ... – Remi