我最近建议尝试使用心跳来解决我项目中的问题。因为我是javascript的新手,所以在继续之前我试图实现this question的第二个答案,但即使这样做似乎也不起作用,我无法理解为什么。这些是涉及的三个文件:
HTML(Heart.cshtml)
<head>
<script type="text/javascript" src="~/Scripts/heartBeat.js"></script>
</head>
<body>
<script type="text/javascript">
LaunchHeartBeat('@Url.Action("KeepSessionAlive", "Auxiliary")');
</script>
</body>
Javascript(heartBeat.js)
var isSuccess = false;
function LaunchHeartBeat(actionUrl) {
setInterval(function() {
$.ajax({
type: "POST",
url: actionUrl,
success: function () { isSuccess = true; }
});
}, 2000);
}
控制器(AuxiliaryController.cs)
[HttpPost]
public JsonResult KeepSessionAlive()
{
System.Diagnostics.Debug.WriteLine("This is a heart beat");
return new JsonResult { Data = "success" };
}
对不起(我相信)这个简单的问题。我会在评论中提出要求,但我还没有足够的声誉,所以我不知道怎么做。
编辑:我在代码中进行了一些编辑,以便根据第一个答案进行一些修正/简化。它没有解决我的问题,但现在代码更好了。我还从HTML文件中删除了一些不必要的行(这不会影响问题,但现在代码更清晰,更容易理解)。
答案 0 :(得分:1)
C#表达式LaunchHeartBeat('@Url.Action("KeepSessionAlive", "Auxiliary")');
将返回一个字符串,它是端点的URL。因此,当您调用LaunchHeartBeat方法时,需要将其传递给引号
setTimeout
同样setInterval
只举行一次。如果您想要连续执行某些操作,则需要使用var isSuccess = false;
function LaunchHeartBeat(actionUrl) {
setInterval(function() {
$.ajax({
type: "POST",
url: actionUrl,
success: function () { isSuccess = true; }
});
}, 2000);
}
这应该有效
# Parameters :, P1, P2, P3
2012-01-01 01:01:55.000000,1,2,3,4,5,6,6,8,9
2012-01-01 01:01:56.000000,4,9,2,0,2,1,1,6,8
...
答案 1 :(得分:0)
使用浏览器控制台显示错误消息:
Uncaught TypeError: Cannot read property 'ajax' of undefined
这意味着没有定义jQuery,它通过包含行
来解决<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
HTML文件中的。 (我在this question的答案中学到了最后一部分。)