2009-10-21 55 views
0

如何打电话或在asp.net的MVC(C#)应用程序的Global.asax的的Application_Start使javascript函数?呼叫在asp.net mvc的javascript函数从Global.asax的

+0

你想达到什么目的? – Lazarus 2009-10-21 11:39:00

+0

javascript函数通过jquery从数据库中获取要显示给用户的数据。 javascript函数将使用setTimeout定期执行。我需要((文件)。就绪不在$)只有一次调用这个javascript函数,这样的setTimeout将再次照顾调用它的周期性 – Prasad 2009-10-21 11:43:38

+1

哪些错误在$调用的setTimeout(文件)。就绪? – LiamB 2009-10-21 11:44:29

回答

1

你可以记得在会话或饼干(这是性能为JavaScript更容易,但更糟糕的/ etc)最后的“调用”时间,然后

function check() { 
    // or var lasttime = <%= Session["lasttime"] %>; 
    if (now - $.cookie("lasttime") > timeout) 
    { 
    $.cookie("lasttime", now); 
    performAction(); 
    } 
    window.setTimeout(check, 1000); 
} 

您可以从$一次通话时间功能(文件) 。准备()。

但是请注意,它可能需要浏览器几秒钟来渲染页面,也可能撞到404或其他错误,页面将不起作用...... JavaScript是不是做调度操作的可靠方法。

另一种方式是让你的计时器服务器上。像上面这样的JavaScript函数将不时要求它,传递用户ID或类似的东西。这将防止页面重新加载期间定时器重置。但你必须经常请求。所以最好的解决办法是将两种技术结合起来:在服务器

  1. 运行定时器
  2. 当页面呈现,设定VAR inited = FALSE;
  3. 运行功能之上,但这样的:如果定时器= $ .getJSON( “/定时器的uid = X?”);(inited!)并且当您拥有精确的当前计时器时,只需继续使用JavaScript即可,无需服务器请求。
+0

我喜欢并同意此答案。如果目标是防止某些javascript函数每分钟被多次调用一次,而无论用户在那段时间内点击了多少个独立页面,那么让javascript负责(通过cookie,如图所示)以便跟踪时间它最后运行是最有意义的。当然,你可以使用一个会话变量(它很可能依赖于cookies),但是你最终会注入到脚本中。唯一我不确定的是,你的评论是在javascript cookies中做这件事情对性能来说更糟? – Funka 2009-10-22 03:07:58

+0

实际上,唯一需要注意的可能是用户打开了多个选项卡/窗口,以确保它们并非全部都在竞争计时器! – Funka 2009-10-22 03:18:18

+0

每个请求都会发送Cookie,即使是静态文件也是如此。是的会话依赖于cookie(通常),但只有一个;如果添加更多,则会增加流量。用户可以关闭cookies。至于多页面,这是结合了客户端 - 服务器解决方案的理由,因为在服务器上总是会有单个的定时器实例 - 可以联系一次或定期检查计时器。 – queen3 2009-10-22 10:35:22

0

“JavaScript函数得到的数据被示出为从数据库通过jquery的用户。JavaScript函数将周期性地使用的setTimeout执行”

这不会是做到这一点的地方。

你有没有想过用你的母版?

+0

我现在在主页面中使用此调用。但每次我导航到其他页面时,它都会重置间隔。说我需要调用js函数每隔1分钟,当我从第一个到第二个页面浏览,时间间隔被重置,我需要等待该页面1分钟的js函数获取调用 – Prasad 2009-10-21 11:46:26

+0

这就是网络的性质。每个页面都是独立的。顺便说一句,如果我是你,我会使用会话来跟踪用户在页面上出现的时间。然后使用一些逻辑来检查当前时间与会话时间,然后如果它违反了1分钟输出警报脚本(或任何你喜欢的) – LiamB 2009-10-21 11:53:24

+0

你应该在$(document).ready中调用函数一次)并且还通过setTimeout。然后它在第二个1和60/120/180 – 2009-10-21 13:20:37

0

由于JavaScript的在客户端和Global.asax的执行执行服务器端。你不能这样做。

+0

我认为他正在寻找一种方法将它转储到页面上,有点像RegisterClientScript – LiamB 2009-10-21 11:45:18

+0

@Pino,他说他想在问题和评论中都调用JS函数。 – 2009-10-21 11:46:50

+0

是的。完全像常规asp.net中的RegisterClientScript。 – Prasad 2009-10-21 11:47:28

0

您如何检查着陆页负载时的应用程序级别变量(主页面也会这样做)并在其中注册任何javascript并设置变量。

如果变量设置,您可以跳过注册。