2009-07-24 128 views
4

我是使用Prototype庫的初學者。我想知道我們如何將多個參數傳遞給Prototype中的onSuccess/onFailure函數? 例如: -如何將多個參數傳遞給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); 
} 

我想通過一個新的參數fnSccs功能。這怎麼可能。謝謝你的幫助。

回答

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:function(response){myNextStep(response,'a','b'); } – epascarello 2009-07-24 15:02:15

+0

@epascarello:因爲OP要求*參數傳遞*特別是... – CMS 2009-07-24 19:59:30

+0

是mySuccess()在您創建新的Ajax.Request()中的第二個參數的那一刻沒有執行,因此在請求發送之前很久?對我來說,似乎對於'onSuccess'這個關鍵字,只是mySuccess的返回值被賦值,這是未定義的... – Remi 2013-09-10 19:14:01

相關問題