2011-10-10 87 views
5

背景jQuery的 - 更新jquery.sparkline后异步数据获取

我使用jquery.sparkline生产Pie Charts。饼图的数据包含在一个数组中。

当第一次加载页面时,会调用Web服务(使用.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 
} 

回答

7

我需要看到一个更完整的例子,以确定问题出在哪里,但使用异步:真正的工作正常,我

下面是一个非常简单的工作示例的链接:http://omnipotent.net/jquery.sparkline/ajaxtest.html

源的阿贾克斯是在这里: http://omnipotent.net/jquery.sparkline/ajax.phps

如果图表是隐藏的(即。 display:none)。实际上调用.sparkline()时,您可能需要在图表可见的位置调用$ .sparkline_display_visible(),以强制它在该点呈现。

+0

感谢你的示例代码给了我信心,我所做的是从jquery.sparklines的角度来看是正确的,因此让我看到我真的做错了(对异步调用的工作做出愚蠢的假设) – glaucon

+0

对不起,我应该已经说过我编辑了我的原始问题,以扩展我做错了什么,希望它能告诉其他人。 – glaucon

+0

@gareth您的第一个超链接返回404错误 – hughesdan