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

问题描述:

我最近建议尝试心跳来解决我项目中的问题。由于我是JavaScript新手,在继续之前,我试图实现对this question的第二个答案,但即使这似乎不起作用,我也不明白为什么。这是三个文件涉及:简单的心跳实现不适用于MVC

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文件中删除了一些不必要的行(这不会影响问题,但现在代码更清晰,更容易理解)。

+1

一如既往,如果任何人有任何理由对downvote或否认,我将不胜感激一些反馈。 – Pablo

使用浏览器控制台透露了错误消息:

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

C#表达式@Url.Action("KeepSessionAlive", "Auxiliary")将返回一个字符串,它是到端点的URL。所以,当你调用LaunchHeartBeat方法,你需要将它传递引号

LaunchHeartBeat('@Url.Action("KeepSessionAlive", "Auxiliary")'); 

而且setTimeout exceute只有一次。如果要连续执行的东西,你需要使用setInterval

这应该工作

var isSuccess = false; 
function LaunchHeartBeat(actionUrl) { 
    setInterval(function() { 
     $.ajax({ 
      type: "POST", 
      url: actionUrl, 
      success: function() { isSuccess = true; } 
     }); 
    }, 2000); 
} 
+0

感谢您的时间!引号是在那里(我试图删除它们)。我会解决这个问题,检查它是否解决了问题,然后在这里编辑问题。 我将使用setInterval,但不应该在KeepSessionAlive()的末尾调用CheckToKeepSessionAlive()以创建一个循环? – Pablo

+0

setInterval应该可以工作。查看我发布的更新 – Shyju

+0

让我试试你所做的。 – Pablo