我需要在完成时启动相同的ajax请求。我这样做的原因是因为setInterval不提供给我,所以不能保证第一秒内发出的所有请求都将完成,直到第二次setInterval调用。
我看到了一切,因为一个setInterval暂停函数(谁不存在),直到jQuery ajaxStop函数在这种情况下才有用,但对我来说很难实现,所以我意识到最合乎逻辑的自然方式当请求完成时,它会在自己内部调用相同的请求。
任何人都有一个想法,如何调用相同的ajax请求,而不是在回调中再次写入。我认为有更好的方法可以做到这一点,但我没有找到任何关于此的内容。
这是我的代码:
$.post('{% url "orderbook>get-available-balance" %}', {symbol: vm.base_currency}, function(response) {
vm.base_currency_balance = response.available_balance;
});
我想要的是:
var post_1 = $.post('{% url "orderbook>get-available-balance" %}', {symbol: vm.base_currency}, function(response) {
vm.base_currency_balance = response.available_balance;
post_1();
});
有一种方法可以本地执行此操作或以正确的方式实现此行为吗?
抱歉,我不是那种Javascript的人。
答案 0 :(得分:1)
如果你想反复调用相同的ajax调用,那么你只需要一点递归,我想:
function post_1() {
$.post('{% url "orderbook>get-available-balance" %}', {symbol: vm.base_currency}, function(response) {
vm.base_currency_balance = response.available_balance;
post_1(); //call the same function again
});
}
//to kick things off the first time:
post_1();
如果你想在每次调用之间有一个短暂的延迟(这也可能会绕过递归限制,我想),你可以这样做:
//...
vm.base_currency_balance = response.available_balance;
setTimeout(post_1, 3000); //call the same function again
//...etc
最好不要让ajax调用过于频繁,或者做这么长或复杂的请求 - 如果你弄错了,它会严重影响服务器的性能,特别是如果你有很多并发的话用户。
您还应该探索WebSockets之类的东西是否能为您的需求提供更有效的解决方案。
答案 1 :(得分:0)
由于您正在寻找更多优雅方法,我会做这样的事情:
var firstPostInterval = null;
function setFirstPostInterval() {
console.log('setting timeout for setFirstPostInterval()');
firstPostInterval = setTimeout(firstPost(), 3000);
}
function firstPost() {
// clear timeout just in case the call is late so it won't get called again
if (firstPostInterval != null) {
console.log('clearing timeout for setFirstPostInterval()');
clearTimeout(firstPostInterval);
}
$.post('{% url "orderbook>get-available-balance" %}', {symbol: vm.base_currency},
function(response) {
vm.base_currency_balance = response.available_balance;
// reset timeout after finish
setFirstPostInterval();
});
}
// go!
firstPost();