延迟POST和GET请求之间的Javascript函数

oknwwptz  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(129)

我尝试延迟POST的GET请求。基本上,使用此代码,我的后端服务器在计算POST请求之前将响应作为JSON数组发送。我希望我的服务器首先处理POST请求,然后在延迟5秒后调用GET请求。
(For你的信息,这段代码把一个HTML表单的内容放到Django数据库中,然后从这个数据库中请求所有的内容,并在一个HTML页面上显示。这就是问题所在,因为当用户提交表单时,他将从数据库中获得所有的内容,而不是他最后一次发送的内容,因为数据库的“截图”是在服务器提交之前拍摄的)。

$(document).on('submit','#post-form',function(e){
    clearInterval(loop)
    e.preventDefault();
      $.ajax({
        type:'POST',
        url:'/send',
        data:{
            room_name:$('#room_name').val(),
          csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
        },
        success: function(data){
           //alert(data)
        }
      });
      document.getElementById('room_name').value = ''
  $(document).ready(function com() {
  function imgMarkup(model) {
  if (model.media) {//mediasrc
    return `<img class='imgchat' src=${window.location.origin}/static/${model.mediasrc}.png>`
  }
  return '';
}
function csvMarkup(model) {
  if (model.excel) {
    return `<p><a href="${window.location.origin}/static/${model.mediasrc}" class="dl-csv">[Download]</a></p>`
  }
  return '';
}
function botCheck(model) {
  if (model.bot) {
    return 'FinanceUIp.png'
  }
  return 'Y.png';
}
  loop = setTimeout(setInterval(function() {
    $.ajax({
      type: 'GET',
      url: "/trafic",
      success: function check(response) {
        //CODE WORKSPACE //

        }

        //CODE  checkview //

      },
      error: function(response){
        //setTimeout(clearInterval(loop),10000)
      }
    });
  }, 1000), 5000)
})
  });

我试过setTimeout函数,但是它不起作用。就像根本没有延迟一样。

q8l4jmvw

q8l4jmvw1#

下面是一个简单的示例片段(您可以运行它),您可以根据自己的用例进行调整。

  • 一个无休止的get请求循环开始。
  • 当发出post请求时,get请求循环停止。
  • 当post请求完成(或者在本例中失败)时,get请求循环开始。
  • 等等。

不过作为一个建议,使用Promises可以保存很多麻烦,因为它提供了操作之间的简单链接。

let getLoop;

function stopGetRequestLoop() {
  console.log(`*********\nGet loop stops`);
  clearInterval(getLoop)
}

function getRequestLoop() {
  console.log(`*********\nGet loop starts`);
  const start = Date.now();
  getLoop = setInterval(() => {
    // the actual get operation
    const end = Date.now();
    console.log(`Request made after ${end - start}ms`);
  }, 1000);
}

const postRequest = () => {
  stopGetRequestLoop()
  console.log(`*********\nPost request starts`);
  fetch("/")
    // This specific request fails so catch is used. But you can use then or finally
    .catch((e) => {
      // This delay is just a simulation of a post request delay, you can either ignore it or use it if you need a timeout.
      const delay = Math.floor(Math.random() * 3000) + 1000;
      console.log(`> The get request will resume in ${delay}ms`);
      setTimeout(() => {
        getRequestLoop();
      }, delay);
    });
};

getRequestLoop();

document.getElementById("start-button").addEventListener("click", getRequestLoop);
document.getElementById("post-button").addEventListener("click", postRequest);
document.getElementById("stop-button").addEventListener("click", stopGetRequestLoop);
<button id="start-button">Start get request loop</button>
<button id="stop-button">Stop get request loop</button>
<br/>
<br/>
<button id="post-button">Make a post request</button>

相关问题