2011-10-10 10 views
5

पृष्ठभूमिjQuery - अद्यतन jquery.sparkline async डेटा लाने के बाद

मैं jquery.sparkline उपयोग कर रहा हूँ Pie Charts निर्माण करने के लिए। पाई चार्ट के लिए डेटा एक सरणी में निहित है।

जब पृष्ठ को पहली बार लोड किया जाता है तो डेटा प्राप्त करने के लिए वेब सेवा को (.ajax का उपयोग करके) कहा जाता है, वहां निर्दिष्ट कॉलबैक प्राप्त डेटा लेता है और पाई चार्ट से जुड़े सरणी को अपडेट करता है।

स्क्रीन पर एक ड्रॉपडाउन मूल्य बदलते समय उसी अद्यतन प्रक्रिया को लागू किया जाता है।

स्थिति

अगर मैं सेट .ajax झूठी यह सब ठीक काम करता है asynch के लिए = कहते हैं।

यदि मैं .ynax कॉल को 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); } 
}); 

मदद? कोई भी व्यक्ति इस समस्या को पहचानता है?

विकल्प मैं ऑब्जर्वर पैटर्न में बदलाव पर सरणी में होने वाले बदलाव पर नजर रखने के लिए देख रहे हैं और (सुनिश्चित करें कि कैसे नहीं) के लिए राजी 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

मैं एक अधिक पूर्ण उदाहरण देखने के लिए निर्धारित करने के लिए जहां समस्या है की जरूरत है, लेकिन async का उपयोग कर:। सच में मेरे लिए ठीक काम करता है

ajax पक्ष के लिए स्रोत यहाँ है:

यहाँ एक बहुत ही सरल काम कर उदाहरण के लिए एक लिंक है अपने चार्ट छिपा हुआ है http://omnipotent.net/jquery.sparkline/ajax.phps

(अर्थात। प्रदर्शन: कोई नहीं) उस समय। स्पार्कलाइन() को वास्तव में बुलाया जाता है, तो उस बिंदु पर आपको $ .sparkline_display_visible() को कॉल करने की आवश्यकता हो सकती है, चार्ट को उस बिंदु पर प्रस्तुत करने के लिए मजबूर करने के लिए दृश्यमान दिखाई देता है।

+0

धन्यवाद आपका नमूना कोड मुझे विश्वास दिलाता है कि मैं जो कर रहा था वह jquery.sparklines बिंदु से सही था और इसलिए मुझे यह देखने की अनुमति मिली कि मैं वास्तव में क्या गलत कर रहा था (एसिंक कॉल कैसे काम करता है के बारे में मूर्खतापूर्ण धारणाएं बनाते हैं) – glaucon

+0

क्षमा करें मुझे चाहिए ने कहा है कि मैंने अपने मूल प्रश्न को संपादित करने के लिए संपादित किया है कि मैं उम्मीद में गलत क्या कर रहा था, यह किसी और को सूचित कर सकता है। – glaucon

+0

@gareth आपका पहला हाइपरलिंक एक 404 त्रुटि देता है – hughesdan

संबंधित मुद्दे