2009-07-24 21 views
4

私はPrototypeライブラリの初心者です。プロトタイプのonSuccess/onFailure関数に複数の引数を渡す方法を知りたいですか?たとえば : - 私の成功関数fnSccsでプロトタイプのonSuccess関数に複数の引数を渡す方法は?

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

: -

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

私はfnSccs関数に新しい引数を渡したいです。そんなことがあるものか。助けてくれてありがとう。

答えて

7

あなたは、目的のパラメータをrecieves別のものにあなたの成功の機能をラップし、戻ってあなたの古い関数を返すことができます:

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:リクエストが送信されるずっと前に、新しいAjax.Request()で2番目の引数を作成した瞬間にOPがパラメータの受け渡しを要求したため、 – CMS

+0

はmySuccess() ?私にとっては、キー 'onSuccess'には、mySuccessの戻り値が割り当てられているだけです。これは未定義です... – Remi

関連する問題