2011-10-14 173 views
4

我在.aspx頁面上從客戶端調用Web服務,並且我想調用此服務成功的函數。將函數名稱作爲參數傳遞給另一個函數

函數的名稱將作爲參數傳遞給此函數,該函數將動態更改。也許

function funName parm1, parm2, onSucceedCallFuntion 

function onSucceedCallFuntion(result) 
//doing something here.  

,因爲它是一個字符串的是,爲什麼「成功」的功能不能被稱爲

function funName(parm1, par2, onSucceedFunName) { 
    $.ajax({ 
     url: "../WebServices/ServiceName.asmx/ServiceFunName", 
     data: JSON.stringify({ 
      parm1: parm1, 
      par2: par2 
     }), // parameter map type: "POST", // data has to be POSTED     
     contentType: "application/json", 
     dataType: "json", 
     success: onSucceedFunName, 
    }); 

function onSucceedFunName() {} 

回答

15

如果傳遞的名字:

我傳遞它像這樣函數作爲一個字符串,你可以試試這個:

window[functionName](); 

但是,假設函數是在全局 範圍。另外,更好的方法來做到這一點是隻傳遞函數本身:

function onSuccess() { 
    alert('Whoopee!'); 
} 

function doStuff(callback) { 
    /* do stuff here */ 
    callback(); 
} 

doStuff(onSuccess); /* note there are no quotes; should alert "Whoopee!" */ 

編輯

如果你需要的變量傳遞給函數,你可以通過他們沿着的功能。這就是我的意思:

// example function 
function greet(name) { 
    alert('Hello, ' + name + '!'); 
} 

// pass in the function first, 
// followed by all of the variables to be passed to it 
// (0, 1, 2, etc; doesn't matter how many) 
function doStuff2() { 
    var fn = arguments[0], 
     vars = Array.prototype.slice.call(arguments, 1); 
    return fn.apply(this, vars); 
} 

// alerts "Hello, Chris!" 
doStuff2(greet, 'Chris'); 
+0

如果回調有參數會怎樣?所以我們需要做doStuff(onSuccess(arg1,arg2));當我嘗試這樣做時不起作用。 – jmease

+0

@jmease編輯答案。 – sdleihssirhc

相關問題