2011-01-14 12 views
7

में jQuery AJAX अनुरोधों को खराब करता है। मैं एक आईफोन ऐप बना रहा हूं जो UIWebView को मेरे द्वारा बनाए गए वेब एप्लिकेशन पर इंगित करता है।उपयोगकर्ता इंटरैक्शन कभी-कभी UIWebView

वेब एप्लिकेशन डेटा आइटम्स के लिए लगातार वेब सेवा कॉल करता है जिसका उपयोग कैनवास पर नियंत्रण को एनिमेट करने के लिए किया जाता है। जेएसओएन के माध्यम से पैरामीटर पास करने और एक्सएमएल प्रतिक्रिया प्राप्त करने के लिए डेटा का उपयोग jQuery AJAX का उपयोग करता है।

मुझे लगता है कि UIWebView के साथ उपयोगकर्ता इंटरैक्शन होने पर, जावास्क्रिप्ट सेटटाइमआउट विधि अवरुद्ध है और यह बिल्कुल निष्पादित नहीं प्रतीत होता है। काफी उचित; इसके आसपास के तरीके हैं।

लेकिन बड़ी समस्या यह है कि उपयोगकर्ता इंटरैक्शन (ज़ूमिंग, पैनिंग इत्यादि) के बाद हर समय और फिर, AJAX वेब सेवा कॉल हर समय असफल हो जाएंगी और मैं एक कारण स्थापित नहीं कर सकता। भले ही वे बार-बार बने होते हैं, अगले कुछ मिनटों में से कोई भी वेब सेवा तक नहीं पहुंच पाएगा। यदि आप पूरी तरह से UIWebView को छोड़ देते हैं, तो वे तब तक असफल नहीं होंगे जब तक कि वेब सेवा चालू न हो और कनेक्टिविटी मौजूद हो।

क्या कोई सुझाव दे सकता है कि क्यों, और इस बारे में कैसे ठीक/काम करना है?

त्वरित अद्यतन: सफारी मोबाइल डीबगर के अनुसार, त्रुटि फ़ंक्शन में 'प्रतिक्रिया' ऑब्जेक्ट अपरिभाषित है। (यह काम करता है, उदाहरण के लिए, मैं यूआरएल को अमान्य बना देता हूं। इसके बाद इसे उद्देश्य-सी से [वेब व्यू स्ट्रिंगबायवैलुलेटिंग जावास्क्रिप्ट: @ "आखिरी एरर"] कहा जा सकता है, लेकिन इस 'यूईवेब्यूव्यू' त्रुटि को छूने के लिए अपवाद फेंकता है):

$.ajax({ 
    type: "POST", 
    url: "WebService.asmx/GetValues", 
    async: true, 
    data: "{'pageVersionIndex': " + PageVersionIndex + " , 'timeStreamIndex': '" + TimeStream + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "xml", 
    success: function (response) { UpdateControls(response); }, 
    error: function (response, status, errorthrown) { 
     calling = false; 
     lastError = response.statusText; //Throws exception 
     connectionInterrupted = true; 
     DataRoutine = window.setTimeout(DataService, dataFrequency); } 
    }); 
+1

मुझे लगता है कि यह एक अच्छा विचार के लिए एक प्रासंगिक iPhone टैग स्थानापन्न होगा आपके द्वारा प्राप्त टैग में से एक ("वेब-एप्लिकेशन" शायद)। – Pointy

+0

अच्छा विचार, करेंगे। –

उत्तर

2

मुझे डर है कि आप टोस्ट किए गए हैं ... एक तरह से। आईओएस सफारी और UIWebView में क्रमशः सिस्टम प्रक्रियाओं को ब्राउज़र पर प्राथमिकता होती है और यदि मूल प्रक्रियाओं (जैसे हैंडलिंग टच इत्यादि) के लिए अधिक CPU पावर या मेमोरी की अचानक मांग होती है तो ऐसा हो सकता है कि किसी भी चल रहे जावास्क्रिप्ट को निष्पादित करने से रोकने के लिए रोक दिया जाएगा मेमोरी लोड या सीपीयू उपयोग। सबसे बुरा हिस्सा यह है कि यह किसी भी त्रुटि या कुछ भी नहीं फेंक देगा ... यह आपके कोड निष्पादन को रोकता है जैसे कि कुछ नहीं हुआ।

डर है कि अगर यह आपके ऐप में बहुत कुछ होता है तो एकमात्र तरीका किसी प्रकार का टाइमर जोड़ना होगा जो सुनता है अगर अनुरोध अवरुद्ध नहीं किया गया था - तो सफल होने तक इसे फिर से करें।

अप और iOS के चढ़ाव - वे वास्तव में आप देशी जाना चाहते बल्कि तो वेब :)

आशा है कि यह मदद करता है, टॉम

+0

सलाह के लिए धन्यवाद। मैंने प्रत्येक एवेन्यू को समाप्त कर दिया है और एकमात्र तरीका है कि मैं समस्या को दूर करने में सक्षम हूं, पृष्ठ पर जावास्क्रिप्ट विधियों को कॉल करने के बजाय मैन्युअल रूप से NSURLConnection का उपयोग करके वेब सेवा पर कॉल करके। यह टाइमिंग, रीट्रीइंग इत्यादि पर बेहतर नियंत्रण भी देता है। –

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