Javascript 需要在Jquery计时函数中调用函数的帮助吗

Javascript 需要在Jquery计时函数中调用函数的帮助吗,javascript,c#,jquery,model-view-controller,Javascript,C#,Jquery,Model View Controller,我正在开发一个MVC应用程序网站,遇到了一个障碍,我在HomeController上编写了一个名为“AlertCheckFunction”的函数,该函数应该检查某些条件,然后将消息添加到字符串列表中,然后将此列表添加到ViewBag.Message,并在HTML视图中输出。我正在尝试编写一个Jquery函数,该函数在计时器上设置,以便这些警报将每隔一定的秒数重新检查标准,并将这些重新输出到Jquery中的自动计时器 第138-138行是我的自动标记器,当它将文本放入html的无序列表中时效果很好

我正在开发一个MVC应用程序网站,遇到了一个障碍,我在HomeController上编写了一个名为“AlertCheckFunction”的函数,该函数应该检查某些条件,然后将消息添加到字符串列表中,然后将此列表添加到ViewBag.Message,并在HTML视图中输出。我正在尝试编写一个Jquery函数,该函数在计时器上设置,以便这些警报将每隔一定的秒数重新检查标准,并将这些重新输出到Jquery中的自动计时器

第138-138行是我的自动标记器,当它将文本放入html的无序列表中时效果很好,但当我使用Razor调用viewbag时,我无法获得任何输出第141-16行2是我在设置计时器查询函数时的所有不同尝试,然后调用我的c#函数,我得到了一个警报框来处理计时器

但我不知道如何正确调用该函数。 链接

$(文档).ready(函数(){
$('.dropdown toggle').dropdown();
$('.dropdown toggle')。单击(函数(e){
e、 停止传播();
e、 预防默认值();
});
});        
函数tick(){
$('ticker li:first').slideUp(函数(){$(this).appendTo($('ticker')).slideDown();});
}
setInterval(函数(){tick()},5000);
//设置间隔(AlertCheckFunction,5000);
//函数AlertCheckFunction(){alert('test');}
//window.setInterval(函数(){
//$('AlertCheckFunction');
//}, 2000);
//函数警报(){
//$('AlertCheckFunction')
//    }
//setInterval(函数(){alert()},60000)
//setInterval(函数(){
//$.get('AlertCheckFunction',函数(结果){
//});
//}, 3000);
家庭控制器

      public ActionResult AlertCheckFunction()
    {
        List<String> Messages = new List<String>();


        foreach (var i in db.Ingredients)
        {

            if (i.Quantity < i.ReOrderPoint)
            {
                Messages.Add("The quantity of " + i.IngredientName + "Is less than the ReOrderPoint, Suggest placing another order for this ingredient!");

            }
            else
            {
                Messages.Add("No alerts from Ingredeints");
            }

        }




        foreach (var c in db.Customers)
        {
            if (DateTime.Now == c.Birthday)
            {
                Messages.Add("It is " + c.Name + "'s" + "Birthday Today!");
            }
            else
            {
                Messages.Add("No alerts from Customer!");
            }
        }




        foreach (var i in db.Inventories)
        {
            if (i.InvQuantity <= 5)
            {
                Messages.Add("The Inventory of " + i.Name + "Is less than or equal to 5, Consider making new batch");
            }
            else
            {
                Messages.Add("No alerts from Inventories");
            }
        }



        //DateTime lastMonth = DateTime.Now.AddMonths(-1);
        //DateTime twoMonthsAgo = DateTime.Now.AddMonths(-2);

        //var sales = db.Sales.Where(j => j.SaleId).ToList();

        // foreach (var x in db.Sales)
        // {
        //     var alerts = db.Sales.Where(x => x.SaleId.Count);

        ViewBag.Message = Messages;

        return RedirectToAction("Index", "Home");
    }






   HTML 



     <div>
                    <ul id="ticker">
                        @if (ViewBag.Messages != null)
                        {
                            foreach (var v in ViewBag.Message)
                            {
                                <li>
                                    @v
                                </li>
                            }
                        }
                    </ul>
     </div>
public ActionResult AlertCheckFunction()
{
列表消息=新列表();
foreach(变量i,单位为分贝成分)
{
如果(i.数量x.SaleId.Count);
ViewBag.Message=消息;
返回重定向到操作(“索引”、“主页”);
}
HTML
    @如果(ViewBag.Messages!=null) { foreach(ViewBag.Message中的变量v) {
  • @五
  • } }

我认为您混淆了一堆Javascript和MVC代码。如果该方法位于HomeController中,则无法从Javascript调用该方法
AlertCheckFunction

您可以做的是,确保该方法作为控制器操作可用,并且可以在URL上访问,如
/Home/AlertCheckFunction

您尝试的
$.get
与答案最接近。请检查URL上是否有函数及其响应(最好是JSON),并按以下模式进行调用

setInterval(function () {
    $.get('/Home/AlertCheckFunction', function (resp) {
        console.log(resp); // This will be the JSON response.
    });
}, 3000);
您可能还希望传递要在该函数中签入的任何参数。参数可以作为查询字符串传递。更多信息请参见此处

不要将项目放在控制器的ViewBag中,而是尝试返回一个JSON字符串,其中包含要放在警报框中的消息。然后,您的股票代码可以对控制器进行ajax调用并获取新警报

或者,您可以研究angular、knockout或ember之类的东西,当数据发生变化时,它们会为您更改DOM—如果您的结构正确的话

在控制器中:

public JsonResult GetAlerts()
{
    return Json(Alerts, JsonRequestBehavior.AllowGet);
}
在你看来:

$.ajax({
   url: '@Url.Action("GetAlerts")',
   // data: {'alertType': 1}, if you wanted to send some data. The parameter name will have to be _exactly_ the same
   type: 'GET',
   success: function (response) {
       $("#alertsDiv").html(response);
}
});

公共操作结果是我在我的家庭控制器上的代码的开始,底部的div是我在html中调用它的地方。任何帮助、最简单和最普通的解决方案都将不胜感激,期末考试周是1:30,我的批判性思维技能现在就要开始了,所以现在很难理解任何东西。请格式化你的代码正确地说。谢谢你,这有一点帮助,但我对ajax或Json不是很熟悉,我也不确定从这里走到哪里——如果有助于上面的答案,我会发布更多代码。将函数的返回类型更改为JsonResult(虽然它也适用于ActionResult,但这样更清楚)。一旦构建了列表,只需将它们放入JSON字符串中,如下所示:返回JSON(new{Messages=Messages});
$.ajax({
   url: '@Url.Action("GetAlerts")',
   // data: {'alertType': 1}, if you wanted to send some data. The parameter name will have to be _exactly_ the same
   type: 'GET',
   success: function (response) {
       $("#alertsDiv").html(response);
}
});