【问题标题】:delaying javascript flow [duplicate]延迟javascript流程[重复]
【发布时间】:2015-01-16 16:59:25
【问题描述】:

我正在使用 javascript 和 AJAX。我打电话给服务器进行登录。它发送一个登录是真的响应。然后我需要通过再次调用服务器来收集有关用户的所有信息。如果我立即拨打电话,服务器将返回用户未登录的响应。我可以使用 setTimeout(myFunction(), 1000) 或 setInterval(myFunction(), 1000);拨打第二个电话。我想知道,是否有一种干净的方法可以在不运行其余代码的情况下继续等待正确的响应?我想我最大的问题是,如果不将所有内容都放在回调响应中,我怎么能做到这一点?我希望代码有点模块化。

【问题讨论】:

  • 虽然我标记为重复的问题不是完全相同的问题,但最佳答案中列出的技术 正是您需要使用的。
  • 罗里你在做什么?问题与获得 Ajax 响应无关。 Michael 得到了响应(第 2 和第 3 句),但他想延迟其他代码的运行,直到第二个 'ok' 响应进来。(通过覆盖阻止 ui、设置嵌套的 Ajax 调用等)
  • 显示您拥有的代码,然后描述它的问题所在。你的问题根本不清楚。 Javascript 在回调中处理异步响应。这是处理异步响应的唯一方法,因此您正在浪费时间来避免回调。 Promise 是一种更优雅的回调处理方式,但它们仍然是回调。

标签: javascript jquery ajax flow flow-control


【解决方案1】:

您需要使用异步技术进行编程。 jQuery 中的典型 Ajax 调用然后处理响应如下所示:

$.ajax(...).then(function(result) {
   // put code here that uses the result 
   // then continue on with other code that should run after the result was processed
});

// code here will run BEFORE the ajax call completes

如果您想运行一个 ajax 调用,然后再运行另一个,您可以将它们链接起来,也可以从第一个的完成回调中运行第二个:

$.ajax(...).then(function(result) {
     // process result of the first

     // run second ajax call
     return $.ajax(...)

}).then(function(secondResult) {
     // code here when second ajax call is done
});

【讨论】:

  • 认为他已经按照你说的做了。他正在询问在请求之间做什么。我想显示一个加载器和一个模态是一些标准的。
  • @skobaljic - 我相当怀疑。 OP 正在使用超时来尝试“等待”ajax 调用,如果使用此技术则不需要。与往常一样,如果 OP 只包含他们的实际代码,一切都会更加清晰。
  • 我知道他可能会发送 10 个请求,等待登录(他提到:setInterval(myFunction(), 1000))。此外,他不希望在用户登录之前允许其他代码执行。
  • @skobaljic - 如果/当 OP 澄清他们的问题时,我们可以投入更多时间。就目前而言,您正在猜测它们的含义。我的猜测和你的有点不同,但问题根本不是很清楚。
  • 我很高兴您回来阅读问题并再次阅读问题。这个人注册并提出了一个问题,并在 5 分钟内将其标记为重复(不是)。我们真的应该尝试帮助人们,认为 Rory 犯了“只做他的工作”的错误,忘记了寻求建议时的感觉。
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多