2013-04-10 62 views
1

我使用ajax来检查是否没有新的警报存储在我的sql数据库中。我已经将它设置为每30秒运行一次,但它不断调用每秒钟检查数据库的函数。这是我的代码。ajax调用不断运行

这是视图中的代码。 “_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 
       }); 
      } 

     } 

回答

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

    } 
    }); 
})(); 
+0

谢谢,这工作。 – zms6445 2013-04-10 13:33:28

2

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

1

我可以猜测是,你在完成Ajax调用的再次执行该查询功能。这可能需要一秒钟才能完成该Ajax调用。
您可以在JavaScript代码中使用计时器。尝试使用settimeoutsetInterval。并在该计时器中进行ajax调用。看看是否有帮助。

0

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

一旦ajax调用完成,您正在执行轮询函数,这就是为什么调用如此快速的原因。