Это классическая ошибка при использовании асинхронного программирования. Вы больше не можете думать об одном пошаговом порядке выполнения: вызовите функцию a (), затем b (), затем c (). При использовании любой формы вызова ajax он обычно асинхронный. Это означает, что вызов функции только запускает ее выполнение.
Затем он будет работать в фоновом режиме, а остальная часть вашего javascript будет продолжать работать и завершиться. Затем, спустя некоторое время, вызов ajax завершится, и он вызовет свою функцию успеха. Только из этой функции успеха или любого другого кода, который вы вызываете из функции успеха, вы можете фактически использовать результаты своего вызова ajax. Итак, что вам по сути нужно сделать, это запустить вызов ajax, а затем ваш код javascript на данный момент завершается. Затем вы пишете функцию успеха, которая подхватит выполнение остальной части того, что вам нужно сделать, когда завершится вызов ajax. В этот момент у вас есть данные JSON, и вы можете делать с ними все, что захотите. Вы можете взять эти данные и вызвать другие функции, передав их им, чтобы они могли с ними работать.
Итак, второй шаг выполнения из обработчика успеха. Все, что вам нужно сделать с полученными данными, должно начинаться с обработчика успеха.
Итак, если поток выполнения, который вы хотели сделать, был следующим:
a();
b();
getJSONdata();
c();
d();
Вы должны структурировать это так:
a();
b();
getJSONdata("xxx", function(data) {
c(data);
d();
})
function c(myData) {
// do something with the passed in data
}
где c () и d () происходят в функции успеха при извлечении данных JSON, и они вызываются ТОЛЬКО после того, как данные доступны.