Javascript:关闭问题,我猜......还是奇怪的?

时间:2011-05-03 04:02:48

标签: javascript jquery serverside-javascript

好吧,我正在使用 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 :(

为什么会发生这种情况? 两者都应警惕相同的数据..因为坐标对两者都是全局的!

3 个答案:

答案 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(',');发生的时间相对较晚 - 请求成功后。如果要使第二个示例有效,则必须等待分配坐标。像这个工作小提琴的东西:

http://jsfiddle.net/UtXgK/11/

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秒。