在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或空。
为了将回调中的变量集分配给局部变量以便我可以访问它,我该怎么做?
答案 0 :(得分:0)
您似乎正确地将值分配给clientResult
,您只是过早访问它。
您正在进行异步/非阻塞调用,这意味着它会立即返回,但会继续在后台运行。因此,您的JavaScript会立即从调用PageMethods.ServerValidateCreateCompany
返回,然后转到alert
。但是您的请求还没有时间完成,而您的成功回调(OnServerValidationSuccess
)尚未运行,因此您获得了undefined
或null
。
您应该调用任何函数来处理中的响应 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');
}
}