C# ajax调用正在持续运行

C# ajax调用正在持续运行,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,我正在使用ajax检查sql数据库中是否没有存储新警报。我已经将它设置为每30秒运行一次,但它会继续调用每秒检查数据库的函数。这是我的密码 这是视图中的代码。“_Tasks”是我的局部视图,它将是要更新的视图。我没有为成功返回做任何事情,因为它从未到达该代码 @Html.Action("_Tasks") <script type="text/javascript"> (function poll() {

我正在使用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>

超时不是延迟。超时是在将请求视为失败之前应该等待的时间。通过将
complete
设置为
poll
,您告诉它立即拨打另一个电话。您需要延迟
完成功能。

尝试以下操作:

(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");

    } 
  });
})();

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

超时:30000
只是为了确保ajax调用在最长时间内等待响应

ajax调用一完成,您就在执行poll函数,这就是调用速度如此之快的原因

(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");

    } 
  });
})();