如果它不仅仅是一个函数,而且还有许多依赖于响应的函数,那么在执行其余代码之前等待 $.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 }
完全是别的什么吗?这些只是我发现的最常见的解决方案,可能还有其他可能性如何做到这一点。我很感谢每一个建议!
缥缈止盈