2011-10-10 86 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