如何将函数分配给全局变量?
我想将一个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
}
)
}
我有被传递函数名varOnSuccess
,varOnError
和varOnComplete
问题。如果我有一个名为SuccessCallback()
的函数,并且我希望服务调用的result
传递给SuccessCallback()
,那么如何将它分配给varOnSuccess
全局变量?变量赋值将发生在另一个称为SetupServiceCall()
的函数中。换句话说,在SetupServiceCall()
函数中应该如何完成varOnSuccess =
?
我会说:
varOnSuccess = SuccessCallback;
看jQuery的文档在上SuccessCallback()将接收参数的详细信息。
谢谢,这解决了当前的问题。虽然我觉得乔丹的解决方案(将价值转化为功能)是首选,但有时您只需要使用绷带并继续移动。 – Joe 2012-02-21 16:31:31
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);
你可以简单地在你的Ajax调用使用功能名称,而不括号,例如:
$.ajax({
...
success: SuccessCallback,
error: ErrorCallback,
...
});
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
});
}
您是否真的在所有变量*名称的前面添加'var' ?! – ThiefMaster 2012-02-21 16:18:24
@ThiefMaster - 是的,我们正在维护模式,所以我们尽可能少做。 – Joe 2012-02-21 16:34:24