如何将函数分配给全局变量?

时间:2012-02-21 16:13:29

标签: javascript jquery

我正在尝试将javascript函数的名称传递给全局变量。我有一个围绕$ .ajax()构建的通用“CallMyWebService”函数。函数的url,动词,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 =

5 个答案:

答案 0 :(得分:2)

我会说:

varOnSuccess = SuccessCallback;

查看jQuery文档,了解SuccessCallback()将接收的参数的详细信息。

答案 1 :(得分: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);

答案 2 :(得分:0)

你的意思是:

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

答案 3 :(得分:0)

您可以在ajax调用中简单地使用不带括号的函数名称,例如:

$.ajax({
...
success: SuccessCallback,
error: ErrorCallback,
...
}); 

答案 4 :(得分: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
    });

}