Sunday, 15 July 2012

java - GWT method returns before RequestBuilder ajax call finishes -


अब तक मेरा कोड है (यह GWT का उपयोग कर रहा है):

  निजी अर्रेलिस्ट & lt; tobjects & gt ; GetSuggestions (स्ट्रिंग क्वेरी) {// पिछले सुझावों को साफ करें Window.alert ("क्लियरिंग सरणीसूची"); arrayList.clear (); क्वेरी = query.toUpperCase ()। प्रतिस्थापित करें ("", ""); RequestBuilder आरबी = नया RequestBuilder (RequestBuilder.GET, "xmlfile.php? क्वेरी =" + क्वेरी); Rb.setHeader ("सामग्री-प्रकार", "एप्लिकेशन / एक्स-www-फ़ॉर्म-यूआरएलएक्सोडेड"); {Rb.sendRequest (नल, नया अनुरोधकॉलबैक ()) {@Override सार्वजनिक शून्य पर उत्तरदायित्व प्राप्त करें (com.google.gwt.http.client.Request अनुरोध, com.google.gwt.http.client.Response प्रतिक्रिया) {विंडो.लर्ट ( Response.getText ()); // बहुत सारे डेटा प्रोसेसिंग करें यहाँ। विंडो.लर्ट ("सरणी में जोड़ना"); addToArrayList (डेटा);}} @ ओवरराइड सार्वजनिक शून्य पर त्रुटि (com.google.gwt.http.client । अनुरोध अनुरोध, थ्रोबल अपवाद) {// टू-ओ स्वत: उत्पन्न पद्धति स्टब}}); } पकड़ (RequestException ई) {Window.alert (e.toString ()); } विंडो। अलर्ट ("सरणी सूची लौट रही है।" + ArrayList.toString ()); वापसी सरणी सूची; }   

मुझे सही ढंग से प्रतिक्रिया मिलती है, लेकिन यह विधि जोड़ा जाने से पहले (खाली) सरणी सूची देता है अगर मैं arrayList.clear () हटाता हूं, तो अगली एजेक्स कॉल पर मैं पिछले कॉल के परिणाम देखता हूं। जब मैं अलर्ट को देखता हूं, तो इस क्रम में आग:

1) "क्लीयरिंग सरलीलिस्ट।"

2) "सरणी सूची लौट रही है।"

3) एजेक्स से सही प्रतिक्रिया के साथ अलर्ट

4) "सरणी सूची में जोड़ना"

ऐसा लगता है कि विधि वापस करने और विधि खत्म करने से पहले एजेक्स को पूरा करने के लिए इंतजार नहीं कर रहा है। मैं इसे एजेक्स और amp के लिए कैसे इंतजार कर सकता हूं; सरणी सूची की आबादी से पहले कि मैं रिटर्न बयान ले लूं?

धन्यवाद!

एसिंक कॉल का मतलब गैर-अवरोधक कोड है! आपको लगता है कि एसिंक्रोनस , उदाहरण के लिए कभी भी विधि पर भरोसा नहीं करना चाहिए जो एक एसिंक कॉल का उपयोग करके वापस लाया जा सकता है: डेटा के लिए इंतजार न करें , लेकिन < सामान्यतः यह onResponseReceived () पद्धति के अंदर तर्क डालकर किया जाता है या कॉलबैक में कॉल किया जाता है जिसे कॉल किया जाएगा, या एक घटना का उपयोग कर रहे हैं।

No comments:

Post a Comment