【问题标题】:Simple heartbeat implementation not working in MVC简单的心跳实现在 MVC 中不起作用
【发布时间】:2017-10-04 14:56:22
【问题描述】:

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

【问题讨论】:

  • 与往常一样,如果有人有任何理由投反对票或不赞成,我将不胜感激。

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


【解决方案1】:

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

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

同样setTimeout 只执行一次。如果你想连续执行某些事情,你需要使用setInterval

这应该可行

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

【讨论】:

  • 感谢您的宝贵时间!引号以前就在那里(我在尝试东西时删除了它们)。我会解决这个问题,检查它是否解决了问题,然后在此处编辑问题。我将使用 setInterval,但是在 KeepSessionAlive() 结束时调用 CheckToKeepSessionAlive() 是否也应该创建一个循环?
  • 让我试试你的做法。
  • 仍然无法正常工作,但我认为您的代码应该不错。我在你的函数中设置了一个断点,它没有被触发;是否有可能我在 html 文件中做错了什么? (这是我第一次在自己的文件中尝试 javascript 代码。)
  • 检查您的浏览器控制台,看看您是否有任何脚本错误。如果是,请解决此问题。当你有一些 javascript 不工作时,这就是开始的方式。然后注释掉你的代码的某些部分,看看是否解决了它,如果是,你现在知道哪个部分有错误的代码。
  • 我有一种感觉,我在某处遗漏了一些非常愚蠢的东西。明天我会试着找一位同事......无论如何,谢谢你的时间,我从你的回答中学到了一些东西,即使它没有解决我的问题。如果我发现我做错了什么,我会更新。
【解决方案2】:

使用浏览器控制台显示错误消息:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2023-04-06
    • 2011-05-09
    • 2010-11-09
    相关资源
    最近更新 更多