简单的心跳实现不适用于MVC

时间:2017-10-04 14:56:22

标签: javascript asp.net-mvc web-services design-patterns

我最近建议尝试使用心跳来解决我项目中的问题。因为我是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文件中删除了一些不必要的行(这不会影响问题,但现在代码更清晰,更容易理解)。

2 个答案:

答案 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的答案中学到了最后一部分。)