好吧,我正在使用 JQuery 来获取Ajax Post请求并获取数据。
Ajax工作正常,但是:
coordinates = [];
$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); alert(coordinates); }); // Alerts the Coordinates as Expected :)
但是...
$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); });
alert(coordinates); // Alerts with a Blank Box :(
为什么会发生这种情况? 两者都应警惕相同的数据..因为坐标对两者都是全局的!
答案 0 :(得分:1)
在这一个:
$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); });
alert(coordinates);
在邮件甚至从服务器返回之前,您立即进行警报。
所以我会说这个问题与执行顺序有关,而不是闭包。
答案 1 :(得分:1)
alert(coordinates);
在function(result) {...}
调用之前执行。
欢迎来到异步世界。
答案 2 :(得分:0)
这很有道理。在您的第二个示例中,alert(coordinates);
正在发生。而coordinates = result.split(',');
发生的时间相对较晚 - 请求成功后。如果要使第二个示例有效,则必须等待分配坐标。像这个工作小提琴的东西:
var coordinates = 'no response from server yet';
$.post("/echo/json/",{json:'{"data":"one,two,three"}'},function(result) { coordinates=result.data.split(','); alert(coordinates[1]);});
setTimeout(function(){ alert(coordinates[2]); }, 5000);
假设从$ .post返回结果的时间不超过5秒。