将Javascript PageMethods“返回值”存储到变量中

Posted

技术标签:

【中文标题】将Javascript PageMethods“返回值”存储到变量中【英文标题】:Store Javascript PageMethods "return value" into a variable 【发布时间】:2013-04-24 05:24:42 【问题描述】:

我有一个示例代码如下:

PageMethods.getServerTime(DateTimeFormat, OnRequestComplete, OnError);

它使用 javascript PageMethods 调用 C# 函数getServerTime。但是,我注意到如果我使用以下代码,我将能够查看“返回值”。

    function OnRequestComplete(result) 
        alert(result);
    

但是,如果我尝试使用以下代码:

var result = "";
result = PageMethods.getServerTime(DateTimeFormat, OnRequestComplete, OnError);

我永远一无所获。

根据我通过互联网的理解和研究,结果似乎得出以下结论:

Because the ajax call is async. It does not wait for the ajax call to complete.

因此,这是否意味着全世界都没有办法将“结果值”存储到 Javascript 变量

我只能放一个alert() 或使用<div> 来显示结果。没有机会将其存储到 Javascript 变量中以供以后使用?

【问题讨论】:

【参考方案1】:

你是对的。因为调用是异步的,所以在调用 getServerTime 时没有为“结果”分配任何值。但是您已经通过使用 OnRequestComplete 击中了头部,因为您可以确定它已被设置。如果您随后需要对该值执行某些操作,例如将其显示给用户,那么您必须在此方法中或通过从内部调用另一个方法来执行此操作。

var result = "";
function OnRequestComplete(res) 
    result = res;
    DoSomethingWithResult();


function DoSomethingWithResult()
    // Do your stuff here

【讨论】:

感谢您确认我的结论。顺便说一句,您的代码还意味着我必须立即使用result,无论是在OnRequestComplete 函数还是DoSomethingWithResult 函数中。如果我不在职能范围内,我将失去这两个价值。我只想将它存储在一个简单的 Javascript 变量中,以便以后可以使用它。

以上是关于将Javascript PageMethods“返回值”存储到变量中的主要内容,如果未能解决你的问题,请参考以下文章

通过 PageMethods 和 AJAX 调用将 JQuery 脚本错误记录到 ASP.NET 服务器

将 ASP.NET PageMethods 与 JQuery 数据表一起使用?

有啥方法可以进行同步 PageMethods 调用?

PageMethods 和 UpdatePanel

Pagemethods得到缓存

从具有多个参数C#的PageMethods返回值后不调用成功函数