【问题标题】:How to wait only for 1 second when Ajax Request is made, but don't cancel the request after wait time?发出Ajax请求时如何只等待1秒,但等待时间后不取消请求?
【发布时间】:2019-01-24 21:45:23
【问题描述】:

如果 ajax 请求未在 1 秒内返回,我必须返回 false。但是在请求完成后处理响应。使用 Ajax 超时对我不起作用,因为它会在该时间之后取消请求。但即使需要很长时间,我也希望得到回应。

例子:

function call(){
  ajax.request(...)
     if(does not respond in 1 second)
        immediately return false and wait for response
     else
        return response
}

【问题讨论】:

  • 你试过setTimeOut吗?
  • 你是在使用 Promise Ajax 库,还是在 Ajax 完成时使用回调?
  • @GarrettMotzner:我在 Ajax 完成时使用回调。
  • 另外,在这种情况下,您所说的“返回”是什么意思?在进行异步调用时,“return”实际上并没有多大意义,因为启动异步操作的函数会立即返回,并且不会阻塞等待该操作完成。
  • 你能包含一些你的回调吗?

标签: javascript jquery ajax asynchronous settimeout


【解决方案1】:

您需要在请求完成和错误处理程序之间设置竞争。如果请求首先完成,请在处理错误之前设置一个您检查的标志:

function call(){
  let finished = false;
  function callback(){ 
    finished = true 
    // your callback code goes here
  };
  ajax.request(..., callback) // make sure this is an async request
  function handleTimeout() {
    if (finished) return;
    // your timeout code goes here
  }
  setTimeout(handleTimeout, TIMEOUT_IN_MILLISECONDS);
}

或者设置一个标志,你可以cancel the timeout

请注意,您的 call 函数不会返回任何内容。相反,您实际上是在处理事件(请求完成或超时到期中的一个或两个)。

【讨论】:

  • 谢谢。这完美地工作。我犯的错误是我保持 async:false 这很明显。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2018-08-05
  • 1970-01-01
  • 2013-08-02
  • 2019-12-25
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多