【问题标题】:calling Static Method from javascript从javascript调用静态方法
【发布时间】:2015-08-17 11:20:30
【问题描述】:

我需要根据下拉列表中选择的值创建图表。

我正在根据所选值从数据库中提取值并在图表和图形(Google 图表或任何基于 Java 脚本的图表)中显示数据。

但是在从 javascript 调用时,方法后面的代码需要是静态的。

如果方法是静态的,那么数据将保存在内存中,在多用户站点的情况下,用户可能会得到不合适的图表。

也就是说,用户只会得到最近保存在内存中的数据。

请建议如何解决这个问题。

【问题讨论】:

  • 请看下面网址中的例子。 aspsnippets.com/Articles/…
  • 这是 ajax,数据不会在内存中,每个用户都会看到保存在 DB 中的数据。

标签: javascript c# asp.net charts fusioncharts


【解决方案1】:

我不明白为什么你需要一个静态方法。这不是绝对必要的。

无论如何,如果您需要将数据存储在内存中(无论它是否是静态方法),您都可以为您的应用程序使用缓存。它基本上是一本字典。然后,在某些时候,您需要使用您的应用程序识别用户,以便区分内存中的数据。如果您有身份验证模块,则密钥可能是用户的身份。如果没有,则向客户端发送一个具有唯一值的 cookie,例如 DateTime.Now.Ticks.ToString()。这可以是一种安全的方式来识别您的用户。

所有的 JS 调用总是发送 cookie。这样您就可以识别和区分内存中的数据。

问候

【讨论】:

  • 感谢您的回复。如果该方法是非静态的并且它不包含 Web 方法标记,则这些方法不能用于从 java 脚本进行调用。 javascript 只调用静态方法。
  • 在我的情况下,我不想在内存中保存任何数据。我告诉了静态方法的行为,它默认将数据保存在内存中。
  • 好的,现在我明白了。您在服务器端使用 Webforms。是的,一种解决方案是使用静态方法进行 javascript 消费,但我不知道您为什么指出“将数据保存在内存中”。你能就你的问题提供更多细节吗?这是我第一次听说这样的事情。
  • 在 Web 应用程序的上下文中,静态方法在所有请求线程之间共享并保留在内存中。这意味着如果两个请求都在处理并且每个请求都尝试设置静态数据,那么您就会遇到竞争条件(以及潜在的线程问题)。
  • 是的,但是您的问题仅在于从数据库中获取值,然后是线程安全的。如果您打算设置静态变量,那么您可以有竞争条件。检查blogs.msdn.com/b/benchr/archive/2008/09/03/…,或者我遗漏了什么?据我所知,您的方法只需要从服务器返回数据。只要您的方法不依赖于静态方法之外的静态变量,您的方法就是安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多