2010-10-28 42 views
0

我有一個緩慢的功能,做一個AJAX請求:的Javascript:調用特定的功能上功能齊全

function X(param1,param2){ 
var params={ 
    type: "POST", 
    url: "./ajax/useful.php", 
    data: "param1="+param1+"&param2="+param2, 
    success: function(msg){ 
     //do something 
    } 
    }; 
    var result=$.ajax(params).responseText; 
} 

一切正常,當我打電話X(「ASDF」,「QWERTY」)。現在

,我想要做的是能調用函數X如下:

function X(param1,param2,function(){alert('hi');}){ 
var params={ 
    type: "POST", 
    url: "./ajax/useful.php", 
    data: "param1="+param1+"&param2="+param2, 
    success: function(msg){ 
     ///// 
     //I want to be able call the function in the 3rd parameter (alert in this case) 
     ///// 
    } 
    }; 
    var result=$.ajax(params).responseText; 
} 

現在你可能會說,爲什麼不讓我叫警報(「你好」)直接在裏面成功。當然我可以做到這一點,但我希望能夠改變被調用函數內部的內容(不僅僅是一個簡單的提醒('嗨'),這取決於誰在調用X.

回答

4

你聲明你的X函數是這樣的:

function X(param1,param2,callback){ 

...使用這樣的回調:

success: function(msg){ 
    callback(); 
} 

...並呼籲X這樣的:

X('a', 'b', function(){alert('hi');}); 

這是可行的,因爲您的成功處理程序是關閉關於您的X函數中的數據,包括其參數。它具有對該信息的實時引用(即使在返回X之後),所以稍後當Ajax調用完成時,它仍然可以使用callback參數。更多關於這裏關閉:Closures are not complicated

+0

圖例,這應該工作。我不確定語法。非常感謝, – Eamorr 2010-10-28 12:10:47

0
function X(param1,param2,f){ 
var params={ 
    type: "POST", 
    url: "./ajax/useful.php", 
    data: "param1="+param1+"&param2="+param2, 
    success: function(msg){ 
     f(); 
    } 
    }; 
    var result=$.ajax(params).responseText; 
} 

應該工作。 你不能這樣稱呼X:

X(param1,param2,function(){dowhatever}) 
+0

嗨,謝謝你的回覆。 T.J.上面的克勞德提出了一個調用X的好方法,同時充分利用了匿名函數。 – Eamorr 2010-10-28 12:14:24

+0

@Eamorr我的代碼完全一樣,唯一的區別是'callback'在我的代碼中被命名爲'f':) – joni 2010-10-28 12:19:12