tl;博士
如果 $.getJSON 不仅是一个函数而且许多函数依赖于响应,那么在执行其余代码之前等待完成的最佳方法是什么?
更长的解释:
我有一个已达到一定复杂程度的 javascript 应用程序。接近一千行代码和两打功能,看不到尽头。该应用程序依赖于存储在数据库中的值。更准确地说,我没有一个依赖于请求数据的函数,但我的大多数函数都使用这些值和某些点。
到目前为止,我从 php 中的 db 中提取数据并将它们回显到输入字段中,然后在 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
}
- 完全是别的东西吗?这些只是我发现的最常见的解决方案,可能还有其他可能性如何做到这一点。我感谢每一个建议!