我正在使用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
});
}
}
答案 0 :(得分: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");
}
});
})();
答案 1 :(得分:2)
超时不是延迟。超时是在考虑请求失败之前应该等待多长时间。通过将complete
设置为poll
,您可以告诉它立即拨打另一个电话。您需要延迟complete
功能。
答案 2 :(得分:1)
我能猜到的是,你在完成ajax调用后再次执行poll函数。可能只需要一秒钟即可完成ajax调用。
你可以在javascript代码上使用计时器。尝试使用settimeout
或setInterval
。并在该计时器中执行ajax调用。看看是否有帮助。
答案 3 :(得分:0)
timeout: 30000
只是为了确保您的ajax调用最多等待响应时间。
ajax调用完成后,您正在执行poll函数,这就是调用如此快速的原因。