访问在PageMethod调用的Callback函数中设置的javascript变量

时间:2011-04-19 15:51:21

标签: javascript callback scope pagemethods

在click事件中,我调用一个PageMethods请求,该请求包含两个回调函数:OnServerValidationSuccess和OnServerValidationFailure。我也尝试设置创建一个名为clientResult;

的对象
    var clientResult = { rc: "", msg: "" };

    $('#btnSave').click( function () {
        PageMethods.ServerValidateCreateCompany(companyName, domainName, country, OnServerValidationSuccess, OnServerValidationFailure);
        alert(clientResult.rc); //this is null!
});

在OnServerValidationSuccess中,result参数包含异步响应。在那里,我尝试将其分配给clientResult

//On Success callback
function OnServerValidationSuccess(result, userContext, methodName) {
    clientResult = result;
    if (clientResult.msg.length != 0) {
        document.getElementById('resMsg').innerHTML = clientResult.msg;
        $('#resMsg').addClass('warning');
    }
}

我在回调函数中将result分配给本地clientResult变量。它应该包含完整形成的服务器响应,由服务器端WebMethod正确发送。 但是,在调用PageMethod后,它仍为null或空。 为了将回调中的变量集分配给局部变量以便我可以访问它,我该怎么做?

1 个答案:

答案 0 :(得分:0)

您似乎正确地将值分配给clientResult,您只是过早访问它。

您正在进行异步/非阻塞调用,这意味着它会立即返回,但会继续在后台运行。因此,您的JavaScript会立即从调用PageMethods.ServerValidateCreateCompany返回,然后转到alert。但是您的请求还没有时间完成,而您的成功回调(OnServerValidationSuccess)尚未运行,因此您获得了undefinednull

您应该调用任何函数来处理中的响应 OnServerValidationSuccess函数,该函数将收到响应。也许这样的事情(你似乎已经用msg做了一些事情,只是在这里用rc移动你的工作)

//On Success callback
function OnServerValidationSuccess(result, userContext, methodName) {
    clientResult = result;
    alert(clientResult.rc); //this will work
    process(clientResult); //process the response here
    if (clientResult.msg.length != 0) {
        document.getElementById('resMsg').innerHTML = clientResult.msg;
        $('#resMsg').addClass('warning');
    }
}