Первая часть вас понимает это так:
$.getJSON()
работает асинхронно. Это означает, что когда вы вызываете его, все, что он делает, это запускает операцию. Код, следующий за этой функцией, продолжает выполняться, пока вызов $.getJSON()
работает в фоновом режиме. Через некоторое время результаты JSON будут доступны, и будет вызван обработчик успеха.
ТОЛЬКО в обработчике успеха вы можете использовать эти результаты.
Таким образом, вы не можете написать нормальный процедурный код, который делает это:
function processArray() {
$.getJSON(url, function(data) {
// only in here can you process the data returns from the getJSON call
})
// you cannot use the JSON data here as it is not yet available
// you cannot return any of the JSON data from the processArray function
}
Вместо этого вы должны написать код, использующий обработчик успеха. Вот один из способов сделать это:
function processArrays(urlToProcess1, urlToProcess2, callbackWhenDone) {
$.getJSON(urlToProcess1, function(data) {
// only in here can you process the data returns from the getJSON call
// do whatever you want to do with the JSON data here
// when you are done process it, you can then make your next getJSON call
$.getJSON(urlToProcess2, function(data) {
// do whatever you want to do with the JSON data here
// when done, you can then call your callback function to continue on with other work
callbackWhenDone();
});
});
}
Еще одна вещь, которую вы не можете сделать, это:
function processArray() {
var result;
$.getJSON(url, function(data) {
// only in here can you process the data returns from the getJSON call
result = data;
})
return(result);
}
var data = processArray();
// code that uses data
Вы не можете сделать это, потому что данные результата не доступны, когда processArray () возвращает. Это означает, что вы не только не можете использовать его внутри processArray (но вне обработчика успеха), но вы не можете вернуть его из processArray () и не можете использовать его в коде, написанном после processArray (). Вы можете использовать эти данные только из обработчика успеха или из кода, вызываемого из обработчика успеха.
Если у вас была целая куча URL-адресов для обработки, и вы использовали один и тот же код для каждого из них, вы могли бы передавать массив URL-адресов и проходить через них, начиная следующий вызов getJSON, только когда был вызван обработчик успеха первого .
Если бы у вас была целая куча URL-адресов, каждый с разным кодом, вы могли бы передать массив URL-адресов и массив функций обратного вызова (по одному на каждый URL).
К вашему сведению, я не вижу проблем с передачей boolToSort. Мне кажется, что проблема в том, как вы обрабатываете асинхронные вызовы ajax.
Для полноты можно использовать синхронные вызовы ajax, но это НЕ рекомендуется, потому что это плохо для пользователя. Он блокирует браузер на время сетевых операций, что, как правило, не очень хорошо. Гораздо лучше использовать обычные асинхронные вызовы ajax и структурировать свой код для правильной работы с ними.