Вы должны иметь в виду последовательность, в которой ваш код фактически выполняется.Ваш код будет фактически выполняться в следующем порядке:
$('#citations_button').data('citations', false);
$.getJSON(apaurl, ..., "html");
console.log("citations? "+$('#citations_button').data('citations'));
Затем, в конце концов, когда асинхронный запрос вернется, он запустит вашу функцию обратного вызова:
$('#apacite').html("<td class=\"bibInfoLabel\">APA Citation</td><td class=\"bibInfoData\">"+data+"</td>");
$('#citations_button').data('citations', true);
Конечно, вы в конечном итоге установить citations
равным true
, но только после того, как вы уже напечатали его значение false
на консоли.
Если вы хотите сделать что-то только послевы получили данные JSON, этот код абсолютно должен находиться в этой функции обратного вызова (или, конечно, должен вызываться из этой функции обратного вызова).
Если вам нужно дождатьсяВ результате всех вызовов вы можете сделать что-то вроде этого:
var expectedResponses = 2;
function gotResponsesFromAllCalls() {
// Do things you can only do when ALL calls have returned.
};
$.getJSON(url1, function(data) {
// Do things specific to the return of URL 1
if (--expectedResponses == 0)
gotResponsesFromAllCalls();
}, "html");
$.getJSON(url2, function(data) {
// Do things specific to the return of URL 2
if (--expectedResponses == 0)
gotResponsesFromAllCalls();
}, "html");