Javascript: проблема закрытия, я думаю ... или что-то странное? - PullRequest
0 голосов
/ 03 мая 2011

Ну, я использовал 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 ]

1 голос
/ 03 мая 2011

Ваш alert(coordinates); выполняется до function(result) {...} вызова.Добро пожаловать в асинхронный мир.

1 голос
/ 03 мая 2011

В этом:

$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); });
alert(coordinates); 

Вы немедленно отправляете предупреждение, прежде чем сообщение даже вернется с сервера.

Так что я бы сказал, что проблема больше связана с порядком исполнения, чем с закрытием.

0 голосов
/ 03 мая 2011

Это имеет смысл. Во втором примере 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 секунд.

...