如果它不仅仅是一个函数,而且还有许多依赖于响应的函数,那么在执行其余代码之前等待 $.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响应后才会执行/调用函数。您可以通过多种方式提出请求
使用传统方法或者关闭ajax的异步请求
创建 ajax 队列并在收到响应时为另一个请求提供服务 - 您可以存储状态并使用 timeinterval 函数每秒运行它们,这将是忙碌的。
我建议您使用 1,因为异步请求可以通过 async: "false" 作为同步请求
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消