Фон
Я использую jquery.sparkline для создания Круговых диаграмм .Данные для круговой диаграммы содержатся в массиве.
При первой загрузке страницы вызывается веб-служба (с использованием .ajax) для получения данных, указанный там обратный вызов принимает полученные данные и обновлениямассив, связанный с круговой диаграммой.
Тот же самый процесс обновления вызывается, когда раскрывающийся список на экране изменяет значение.
Ситуация
Если я устанавливаю вызов .ajax в asynch =false это все работает нормально.
Если я установлю вызов .ajax на asynch = true, результаты, показанные в круговой диаграмме, всегда будут «на один шаг позади».Под этим я подразумеваю, что сначала не существует круговой диаграммы, а затем, когда раскрывающийся список изменяется, круговая диаграмма отображается так, как и должна была изначально.
Код
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: requestURL,
async: true ,
success: function (data) { successCallback(data); },
error: function (data) { failureCallback(data); }
});
Помощь? Кто-нибудь знает эту проблему?
Опции Я смотрел на изменения в шаблоне Observer, чтобы отслеживать изменения в массиве и (не знаю как) убедить объект jquery.sparkline перерисовать себя, но это кажется сумасшедшим, и я уверен, что должен упускать из виду нечто гораздо более простое.
Благодаря Гарету и его примеру кода я смогчтобы увидеть, что я делаю неправильно (что не имеет ничего общего с jquery.sparkline.
У меня было несколько функций, подобных этой:
function RefreshPieChart(){
//First call managePieDataFetch()
//to kick off the web-service request
managePieDataFetch();
//now reinitialise the jquery.sparkline
//pie charts on the basis that the
//array variable initialised in
//pieDataFetchCallBack() has the newest
//data in it.
//
//.... It hasn't !
}
function managePieDataFetch(){
//invoke the .ajax call and
//provide function pieDataFetchCallBack() as
//a call back function
}
function pieDataFetchCallBack(){
//post process the data
//returned from a successful
//ajax call. Place the results
//into an array variable at
//script scope
}