2012-02-21 60 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 
    }); 

} 
相关问题