2012-02-21 103 views
0

我想將一個javascript函數的名稱傳遞給一個全局變量。我有一個圍繞$ .ajax()構建的通用「CallMyWebService」函數。函數的url,verb,contenttype等是根據全局變量的值設置的。緊接在調用服務函數之前,全局變量被設置並且在全局變量被重置爲空之後。如何將函數分配給全局變量?

我一般 「CallMyWebService」 功能是在這裏:

function CallMyWebService() { 

    $.ajax(
     { 
     url   : varUrl, 
     type  : varHttpVerb, 
     cache  : varCacheBool, 
     data  : varData, 
     contentType : varContentType, 
     processdata : varProcessData, 
     dataType : varDataType, 
     async  : varAsync, 
     success  : varOnSuccess, 
     error  : varOnError, 
     complete : varOnComplete 
     } 
    ) 

} 

我有被傳遞函數名varOnSuccessvarOnErrorvarOnComplete問題。如果我有一個名爲SuccessCallback()的函數,並且我希望服務調用的result傳遞給SuccessCallback(),那麼如何將它分配給varOnSuccess全局變量?變量賦值將發生在另一個稱爲SetupServiceCall()的函數中。換句話說,在SetupServiceCall()函數中應該如何完成varOnSuccess =

+2

您是否真的在所有變量*名稱的前面添加'var' ?! – ThiefMaster 2012-02-21 16:18:24

+0

@ThiefMaster - 是的,我們正在維護模式,所以我們儘可能少做。 – Joe 2012-02-21 16:34:24

回答

2

我會說:

varOnSuccess = SuccessCallback; 

看jQuery的文檔在上SuccessCallback()將接收參數的詳細信息。

+0

謝謝,這解決了當前的問題。雖然我覺得喬丹的解決方案(將價值轉化爲功能)是首選,但有時您只需要使用繃帶並繼續移動。 – Joe 2012-02-21 16:31:31

2

CallMyWebService應接受這些函數作爲參數。你也應該通過引用來傳遞它們,而不是通過字符串名稱。

不要做一個全局變量。如果您有任何類型的並行呼叫,則會失敗。

例子:

function CallMyWebService(successCallback, errorCallback) { 
    $.ajax(
     ... 
     success: successCallback, 
     error: errorCallback 
     ... 
    ); 
} 

//calling the service 
function MySuccessHandler(data) { 
    alert('success'); 
} 

function MyErrorHandler(data) { 
    alert('error'); 
} 

CallMyWebService(MySuccessHandler, MyErrorHandler); 
0

你的意思是像:

var varOnSuccess = null; 
function SetupServiceCall() { 
    varOnSuccess = SuccessCallback; //note 
} 

+0

您使用var關鍵字來指示變量不是全局變量。 – joidegn 2012-02-21 16:29:46

+0

@joidegn這不一定是真的。在函數之外聲明的任何變量都是全局變量。 – noah 2012-07-23 13:04:23

0

你可以簡單地在你的Ajax調用使用功能名稱,而不括號,例如:

$.ajax({ 
... 
success: SuccessCallback, 
error: ErrorCallback, 
... 
}); 
0
window.varOnSuccess = SuccessCallback 

應該工作

不過,我認爲這將是更好的傳遞變量部分以CallMyWebService作爲參數,如下所示:

function CallMyWebService(varSuccess, varError) { 

    $.ajax({ 
     url   : varUrl, 
     type  : varHttpVerb, 
     cache  : varCacheBool, 
     data  : varData, 
     contentType : varContentType, 
     processdata : varProcessData, 
     dataType : varDataType, 
     async  : varAsync, 
     success  : varSuccess, 
     error  : varError, 
     complete : varOnComplete 
    }); 

} 
相關問題