2

我正在使用 ajax 来检查我的 sql 数据库中是否存储了新的警报。我已将其设置为每 30 秒运行一次,但它会继续调用每秒检查数据库的函数。这是我的代码。

这是视图中的代码。“_Tasks”是我的部分视图,它将是要更新的视图。我没有为成功返回做任何事情,因为它永远不会到达该代码。

  @Html.Action("_Tasks")
           <script type="text/javascript">
                (function poll() {

                    $.ajax({                       
                        type: 'GET',
                        cache: false,
                        url: '@Url.Action("TasksRefresh")',
                        dataType: "json", 
                        complete: poll, 
                        timeout: 30000,
                        success: function (data) {
                            if (data.success == true)
                                alert("Hello");

                        } 
                    });
                })();
        </script>

这是在控制器中

public JsonResult TasksRefresh()
        {
            var alerts = getAlerts();
            var cache = HttpRuntime.Cache["Tasks"];
            if ( cache == alerts)
            {
                return Json(new
                                {
                                    success = false,
                                });
            }
            else
            {
                return Json(new
                {
                    success = true,
                   // View = this.Re
                });
            }

        }
4

4 回答 4

3

试试这个:

(function poll() {
  $.ajax({                       
    type: 'GET',
    cache: false,
    url: '@Url.Action("TasksRefresh")',
    dataType: "json", 
    complete: function () { setTimeout(poll, 30000); }, // Changed, call poll again when 30s has pasted
    timeout: 30000, // This just says it fails if the request takes more than 30s
    success: function (data) {
      if (data.success == true)
        alert("Hello");

    } 
  });
})();
于 2013-04-10T13:29:46.157 回答
2

超时不是延迟。超时是在考虑请求失败之前应该等待多长时间。通过设置completepoll,您是在告诉它立即拨打另一个电话。您需要延迟您的complete功能。

于 2013-04-10T13:29:38.763 回答
1

我能猜到的是,您在完成 ajax 调用后再次执行 poll 函数。完成该 ajax 调用可能只需要一秒钟。
您可以在 javascript 代码中使用计时器。尝试使用settimeoutor setInterval。并在该计时器中进行 ajax 调用。看看有没有帮助。

于 2013-04-10T13:31:44.463 回答
0

timeout: 30000 只是为了确保您的 ajax 调用将等待响应的最长时间。

一旦 ajax 调用完成,您就会执行 poll 函数,这就是为什么调用如此之快的原因。

于 2013-04-10T13:34:06.287 回答