为了账号安全,请及时绑定邮箱和手机立即绑定

如果许多功能依赖于响应,等待 jquery ajax getJSON 完成的最佳方法是什么?

如果许多功能依赖于响应,等待 jquery ajax getJSON 完成的最佳方法是什么?

PHP
慕村9548890 2023-09-15 21:25:47
如果它不仅仅是一个函数,而且还有许多依赖于响应的函数,那么在执行其余代码之前等待 $.getJSON 完成的最佳方法是什么?更长的解释:我有一个已经达到一定复杂程度的 JavaScript 应用程序。接近一千行代码和两打函数,而且看不到尽头。该应用程序依赖于存储在数据库中的值。更准确地说,我没有一个函数依赖于所请求的数据,但我的大多数函数都使用这些值和某些点。到目前为止,我在 php 中从数据库中提取数据,然后将它们回显到输入字段中,然后在 js 中读取这些数据。但随着越来越多的变量以这种方式传输,这变得越来越笨拙,而且看起来不太优雅。我确实在对象中拥有大部分可用数据,并且将它们的成员变量填充到输入字段中似乎......笨重。我考虑了不同的数据传输方式,并出于多种原因选择了 jquery ajax,尤其是层的干净分离,而且我已经使用 jquery ajax 来做其他事情了。问题: 我遇到了竞争条件问题。我的一些代码(依赖于 getJSON 请求的数据)在请求完成之前执行。这破坏了整个应用程序。我已经进行了一些研究,现在知道有几种方法可以解决这个问题,但是我没有经验来判断应该选择哪种方法。使用async: false,这仍然有效,并且可能是最容易实现的方法,但它被标记为已弃用,因此我对使用它犹豫不决。将所有内容放入成功处理程序中,例如    $.getJSON("../sender.php", params, function (result) {             //my whole application     });使用承诺。如果我理解正确的话,这意味着我必须包装我$.when( req1, req2, req3 ).done( ... )在其中使用请求值的每个函数。这似乎不利于可读性,而且我了解到干净、可读的代码通常比复杂的结构更好。使用同步请求,例如    var request = new XMLHttpRequest();         request.open('GET', '../sender.php', false);         request.send(params);             if (request.status === 200) {                 //fill the variables with the returned values     }完全是别的什么吗?这些只是我发现的最常见的解决方案,可能还有其他可能性如何做到这一点。我很感谢每一个建议!
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

由于ajax是异步请求,ajax方法不会等待其他方法执行,调用依赖方法的最佳实践是ajax调用成功,只有在收到ajax响应后才会执行/调用函数。您可以通过多种方式提出请求

  1. 使用传统方法或者关闭ajax的异步请求

  2. 创建 ajax 队列并在收到响应时为另一个请求提供服务 - 您可以存储状态并使用 timeinterval 函数每秒运行它们,这将是忙碌的。

我建议您使用 1,因为异步请求可以通过 async: "false" 作为同步请求


查看完整回答
反对 回复 2023-09-15
  • 1 回答
  • 0 关注
  • 56 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信