我有一个AJAX请求,它从数据库中获取数据,然后使用收集的数据填充页面。我遇到的问题是,当前ajax请求是在每秒调用的setInterval中。
<span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>
这是每秒获取数据,这是服务器上的一个巨大压力,因为它正在发出请求,然后我再次调用它,即使数据没有第一次通过。
有没有一种方法可以反复调用相同的AJAX请求,但只有在第一次完成数据提取并且不继续运行之后?
答案 0 :(得分:2)
有更好的架构来完成这种类型的场景(评论中提到的websockets就是一个例子),但要严格按照你的要求行事,当然!将它包装在一个自称的函数中:
function getData(){
$.ajax({
method: "POST",
url: "/PLM/FetchPageContent",
dataType: "json",
success: function (data) {
console.log(data);
getData();
}
});
}
答案 1 :(得分:0)
仅在完成后将setInterval
替换为setTimeout
:
function fetchAjax() {
$.ajax({
method: "POST",
url: "/PLM/FetchPageContent",
dataType: "json",
success: function (data) {
console.log(data);
setTimeout(fetchAjax, 1000);
}
});
};
答案 2 :(得分:0)
如果ajax调用已在进行中,则添加一个变量以进行distunguish。如果是,不要做任何事情。如果没有,请继续。
var isAjaxInProgress = false;
setInterval(function () {
if (!isAjaxInProgress){
isAjaxInProgress = true;
$.ajax({
method: "POST",
url: "/PLM/FetchPageContent",
dataType: "json",
success: function (data) {
console.log(data);
isAjaxInProgress = false;
}
});
}
}, 1000);