如果我想从javascript调用服务器函数来从数据库中检索一个人的名字(仅作为示例)......我去了......
name = myServices.getName(userId);
如果我的脚本管理器具有对具有web方法getName(int userId){}的.asmx文件的服务引用,则应正确调用此函数,并最终返回该userId的名称。< / p>
不幸的是我想做....
name = myServices.getName(userId); 警报(名称);
但是,在执行ASP.NET AJAX时,它会调用web方法并在等待服务器响应之前继续执行(我理解这是ajax的重点,以阻止浏览器在等待数据时冻结)
在我继续执行之前,我需要从服务器取回名称...如何解决此问题?
答案 0 :(得分:3)
您可以将方法作为参数添加到服务方法中,该方法将成功调用方法,您可以执行其他操作。
例如:
function test(){
PageMethods.MyMethod("name", OnMyMethodComplete);
}
function OnMyMethodComplete(result, userContext, methodName)
{
alert(result);
}
答案 1 :(得分:0)
如果要同步调用Web方法,则需要手动设置请求,并使用Sys.Net.XMLHttpSyncExecutor。
Here's an example(参见ExecuteSynchronously函数)
答案 2 :(得分:0)
对于javascript解决方案,您可以循环,直到name有值。根据延迟调整时间以保持应用响应
var time = 100;
window.setTimeout(name = '' ? wait : continue, time);
function wait()
{
window.setTimeout(name = '' ? wait : continue, time);
}
function continue()
{
//code having to do with name
alert(name)
}
答案 3 :(得分:0)
祝贺。你迈出了迈向更大的异步世界的第一步。我肯定会使用CSharpAtl建议的回调。