Javascript 在post请求完成之前执行$.post()之后的代码
我试图使用post请求jQuery的$.post从服务器获取数据,并将其分配给JavaScript变量 代码如下:Javascript 在post请求完成之前执行$.post()之后的代码,javascript,jquery,post,console,Javascript,Jquery,Post,Console,我试图使用post请求jQuery的$.post从服务器获取数据,并将其分配给JavaScript变量 代码如下: function getData() { var zones = DUMMY_zones; var workers = []; console.log("1"); $.post('server/main.php', {info: 'req_workers'}, function(result) { var resu
function getData() {
var zones = DUMMY_zones;
var workers = [];
console.log("1");
$.post('server/main.php', {info: 'req_workers'}, function(result) {
var result = JSON.parse(result);
console.log("2");
});
console.log("3");
return [zones, workers];
}
然而奇怪的是,返回是在$.post请求找到之前执行的,因此workers是未定义的变量。控制台输出如下所示:
ppe_c_js.js:82 1
ppe_c_js.js:90 3
ppe_c_js.js:85 2
如何按顺序执行代码
谢谢大家! 您可以使jquery post同步。但这是一种糟糕的做法。因此,在操作过程中,浏览器将处于冻结状态 $.ajax{ 键入:“POST”, url:url, 数据:数据, 成功:成功, 数据类型:数据类型, 异步:false
};异步代码就是这样做的。它发送请求并继续执行其余代码。在将来的某个时候,post返回后,调用回调并打印2。我明白了!但由于这是一种不好的做法,如何确保在使用之前设置了workers变量?否则,我将面临变量为空的问题。在同步操作中,代码按顺序运行。所以,定义和设置之后,workers变量值将随处可用。您可以将其放在控制台2旁边。如果你有一个更复杂的设置,你可以使用承诺