jquery - обновляет jquery.sparkline после асинхронной выборки данных. - PullRequest
5 голосов
/ 10 октября 2011

Фон

Я использую 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
}

1 Ответ

7 голосов
/ 10 октября 2011

Мне нужно увидеть более полный пример, чтобы определить, в чем проблема, но использование async: true хорошо работает для меня.

Вот ссылка на очень простой рабочий пример: http://omnipotent.net/jquery.sparkline/ajaxtest.html

Источник для стороны ajax находится здесь: http://omnipotent.net/jquery.sparkline/ajax.phps

Если ваша диаграмма скрыта (т. Е. Display: none) во время фактического вызова .sparkline (), тогда вам может потребоватьсявызовите $ .sparkline_display_visible () в точке, где диаграмма становится видимой, чтобы заставить ее отображаться в этой точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...