Javascript 如何在jQuery上调用相同的帖子,有一个快捷方式吗?

Javascript 如何在jQuery上调用相同的帖子,有一个快捷方式吗?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我需要在完成时启动相同的ajax请求。我之所以这样做,是因为setInterval不提供我,不能保证在第一秒钟内发出的所有请求都会在第二次setInterval调用之前完成 我看到了一切,因为setInterval pause函数在jQuery ajaxStop函数之前不存在,这在本例中很有用,但对我来说很难实现,所以我意识到,最合乎逻辑和自然的方法是在请求完成时调用其内部的同一个请求 任何人都知道如何调用相同的ajax请求,而不必在回调中再次写入。我认为这是一个更好的方法,但我没有发现这方面的

我需要在完成时启动相同的ajax请求。我之所以这样做,是因为setInterval不提供我,不能保证在第一秒钟内发出的所有请求都会在第二次setInterval调用之前完成

我看到了一切,因为setInterval pause函数在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的人。

如果你想重复调用同一个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调用过于频繁,也不要像这样执行长时间或复杂的请求——如果您的操作错误,尤其是当您有大量并发用户时,这会严重影响服务器的性能


您还应该探索WebSocket之类的东西是否能为您的需求提供更有效的解决方案。

既然您在寻找更优雅的方法,我会这样做:

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

我尝试了,但是如何循环直到上一个循环请求完成?循环不是解决方案,除非您将请求设置为async:false,这是不推荐的。从其事件之一调用ajax调用违背了ajax调用的目的。你到底希望实现什么?你能详细说明一下吗?我不是只有一个请求,我有很多,一个带完成状态的while循环可能很有用,但在我看来非常难看,主要是因为我有5个以上的请求,这5个请求对我来说会有一个奇怪的while循环代码。@Ted我想要的很简单,我需要以一种快捷方式重现相同的ajax调用,我可以用一个函数来做这件事,然后自己调用它里面的函数,但对我来说这很难看,也许你们这些有经验的人会有更好的方法。遗憾的是,没有更好的方法了。如果在同一个页面上有超过两个的ajax调用,那么ajax调用本质上是丑陋的,什么能阻止这辆马车从悬崖上坠落呢@特德:-OP似乎希望它永远持续运行……当然,它可能会达到递归极限……我不知道他们是否有一些关于何时停止的标准,没有提到。但这是最基本的想法。他已经说过他不想使用循环,他要打5个不同的电话。我很困惑,为什么你会建议其他人在他们的页面上无休止地循环ajax调用。也许是为了好玩@Ted在我的例子中,我需要它永远运行,这是问题的主要建议,但永远运行请求很难以性能方式实现。r@ADyson-我知道你的意思,我从2014年开始使用Signal。