2011-03-25 5 views
9

यह त्रुटि कुछ भी है कि जावास्क्रिप्ट समारोह में गलत हो जाता है कि कहा जाता है के लिए फेंक लगता है:WP7 WebBrowser InvokeScript कॉल फेंकने का कारण क्यों है त्रुटि: 80020101?

SystemException was unhandled  
An unknown error has occurred. Error: 80020101. 

मैं एक वेब एप्लिकेशन बैकएंड के लिए एक इंटरफेस के रूप में जावास्क्रिप्ट का उपयोग कर रहा है, और मैं दो कॉल कि काम कर रहे हैं है ठीक, लदान और एक ajax कॉल, कि इस तरह दिखेगा से JSON लौटने:

सिल्वरलाइट में:

MyBrowser.InvokeScript("getData", "/Me/Feed?numberOfResults=-1", "MyFeed"); 

जावास्क्रिप्ट WebBrowser में लोड

function getData(url, context) { 
    $.ajax({ 
     url: url, 
     dataType: 'jsonp', 
     success: function (result) { 
      callback(result, context); 
     } 
    }); 
} 

लेकिन बाद में मैं डेटा सर्वर को वापस पोस्ट करना चाहते हैं, और मैं एक ही बात कर रहा हूँ:

MyBrowser.InvokeScript("postData", "thedata", "CreatePost"); 

function postData(payload, context) { 
    $.ajax({ 
     type: "POST", 
     url: "/Post/Create?" + tz(), 
     data: payload, 
     dataType:"json", 
     success:function (result) { 
      callback(result, context); 
     } 
    }); 
} 

अब मैं अपवाद मिलता है।

वास्तव में अजीब बात यह है कि मैं तुरंत फ़ंक्शन के भीतर से फ़ंक्शन को कॉल कर सकता हूं और यह बैक-एंड पर ठीक है।

postData("sampledata", "PostTest"); 

पहले तो ऐसा लग रहा था फर्क सिर्फ इतना है कि एक प्राप्त और अन्य एक पोस्ट था, तो मैं दूसरी कॉल में मिल ajax कॉल (जो उपयोगकर्ता इनपुट, जहां पहले एक पर हुआ पर होता है की नकल की भार)। नतीजा वही था (मुझे एक ही त्रुटि मिलती है)। मैं इस घटना से जावास्क्रिप्ट में आग लगाने के लिए अन्य आदेश प्राप्त कर सकता हूं जब तक कि इसमें AJAX कॉल न हों (ऐसा प्रतीत होता है)। तो आप सोच सकते हैं कि यह एक समय की बात है - इसलिए मैंने ऊपर कॉल को ऊपर ले जाया जहां मैं अन्य InvokeScripts को कॉल कर रहा हूं जो काम कर रहे हैं, और यह अभी भी काम नहीं करता है (एक ही अपवाद)।

मैंने डिस्पैचर का उपयोग करके इसे अलग थ्रेड पर भी कॉल करने का प्रयास किया। अच्छी तरह से मापने के लिए और कोई पासा नहीं।

Dispatcher.BeginInvoke(() => 
{ 
    MyBrowser.InvokeScript("postData", "thedata", "CreatePost"); 
}); 

मैं पूरी तरह से परेशान हूं। ऐसा लगता है कि कुछ स्थिरता प्रतीत होती है, अगर कोई कॉल विफल हो जाता है तो यह हर बार असफल हो जाएगा, लेकिन मैं यह नहीं बता सकता कि काम करने वाले कॉल और असफल होने वालों के बीच क्या अंतर है।

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं, या मुझे यह नहीं है कि मैं InvokeScript और Ajax का उपयोग करने के बारे में क्या समझ नहीं पा रहा हूं ??

धन्यवाद!

[संपादित करें - यह इनलाइन जोड़ने (टिप्पणी में था) क्योंकि मैं सवाल एक बहुत हो रही है]

मैं 6 घंटे के लिए इस पर काम किया और इस मैं क्या दिखाई दे रही है है:

  • वहां 2 अलग-अलग कार्यक्रम हैं जिनसे मैं इन कॉल कर रहा हूं; 1) जब पेज लोड ब्राउज़र नियंत्रण पर पूरा कर लिया है, 2) कोई उपयोगकर्ता टैप करता जब मेरी "पोस्ट" बटन
  • त्रुटि नहीं होती है जब अजाक्स कॉल लोड घटना से किसी GET
  • त्रुटि उत्पन्न करता है जब उपयोगकर्ता घटना से ही प्राप्त कॉल बुला
  • त्रुटि भी होती है जब लोड घटना से पोस्ट का उपयोग कर अजाक्स कॉल बुला
  • त्रुटि नहीं होती है जब एक समारोह है कि उपयोगकर्ता से कोई भी अजाक्स का प्रयास नहीं करता बुला घटना
+0

क्या यह प्राकृतिक XMLHTTPRequest के साथ ऐसा करता है? – mattsven

+0

जब आप InvokeScript को कॉल करते हैं तो पृष्ठ पूरी तरह से लोड होता है? हो सकता है कि $ .ajax फ़ंक्शन अभी तक लोड नहीं हुआ है? –

+0

हाय, NeXXeuS - मुझे यकीन नहीं है कि मैं समझता हूं कि आप क्या सुझाव दे रहे हैं। क्या आपका मतलब है कि मुझे वेब ऐप पर इंटरफ़ेस के रूप में जावास्क्रिप्ट का उपयोग करके स्क्रैप करने का प्रयास करना चाहिए और इसे सीधे एक्सेस करना चाहिए? मुख्य रूप से, मेरी टीम सिर्फ इस क्लाइंट के लिए अपनी सभी चीजों को फिर से लिखना नहीं चाहती थी, और दूसरी बात यह है कि यह दृष्टिकोण मौजूदा फेसबुक लेख प्रदान करता है और सभी क्रॉस-डोमेन सिल्वरलाइट मुद्दों से बचाता है – Subcreation

उत्तर

3

प्राप्त JSONP के साथ काम करने को देखकर, और पोस्ट सब पर काम नहीं कर रहा, यह सूचित करते हैं कि आप क्रॉस-डोमेन जा रहा जा सकता है? आमतौर पर एक ही डोमेन पर * P * JSON उपयोग करने के लिए कोई जरूरत नहीं है लगता है।

तो मेरा अनुमान है कि यह एक ही मूल नीति का उल्लंघन है

+0

हाँ, यह पता चला है कि मेरा पृष्ठ सेवा के समान डोमेन पर था, मैं कहीं और से जावास्क्रिप्ट लोड कर रहा था और इसने एक क्रॉस-डोमेन स्थिति बनाई। धन्यवाद, दान! – Subcreation

6

आपको 80020101 त्रुटि मिलेगी यदि जावा स्क्रिप्ट विधि नहीं मिल सकती है या जेएस एक त्रुटि फेंकता है।

विधि खोजने के मामले में, नियंत्रण बिल्कुल हस्ताक्षर से मेल खाता है। यह मानक जावास्क्रिप्ट व्यवहार नहीं है इसलिए इस से सावधान रहें।

ब्राउज़र नियंत्रण में पृष्ठ (और इसकी सामग्री) के कैशिंग से सावधान रहें क्योंकि इससे बहुत से लोग बाहर निकलते हैं। :(

+0

धन्यवाद, मैट। यह मेरी समझ भी थी - लेकिन आप मेरे नमूना कोड में देख सकते हैं कि फ़ंक्शन का नाम और हस्ताक्षर समान है; "पोस्टडाटा", 2 पैरा ले रहा है। मुझे पृष्ठ कैशिंग के बारे में पता है - मैं इसे प्रत्येक परीक्षण से पहले साफ़ करता हूं। – Subcreation

+0

@ नेथन रॉबर्टन इस समस्या की सामग्री को बदलने के लिए कि समस्या कहां है। 'पोस्टडाटा' ऐसा कुछ करें जो निश्चित रूप से यह सुनिश्चित करने के लिए काम करता है कि यह एक इंटरऑप मुद्दा नहीं है। यह एक jQuery मुद्दा भी हो सकता है क्योंकि यह AFAIK पूरी तरह से IE7Mobile का समर्थन नहीं करता है। –

+0

धन्यवाद, मैट - मैंने इस पर 6 घंटे तक काम किया है और यह वही है जो मैं देख रहा हूं: - 2 अलग-अलग कार्यक्रम हैं जिनसे मैं इन कॉल कर रहा हूं; 1) जब पृष्ठ लोड ब्राउज़र नियंत्रण पर पूरा हो गया है, 2) जब कोई उपयोगकर्ता मेरा "पोस्ट" बटन टैप करता है - त्रुटि तब नहीं होती है जब अजाक्स कॉल लोड ईवेंट से प्राप्त होता है - त्रुटि कॉल करते समय होती है उपयोगकर्ता ईवेंट से वही जीईटी कॉल - त्रुटि ईवेंट से POST का उपयोग करते हुए अजाक्स कॉल को कॉल करते समय त्रुटि भी होती है - त्रुटि उस घटना को कॉल करते समय नहीं होती है जो उपयोगकर्ता ईवेंट से किसी भी अजाक्स का प्रयास नहीं करती है। – Subcreation

0

मैं सिर्फ एक समान समस्या तय

यह एक तरह से अजीब बात है ... यह आवश्यकता है:।। 1. पैरामीटर पासिंग जावास्क्रिप्ट फ़ंक्शन एक अल्पविराम सीमांकित स्ट्रिंग 2. स्प्लिट() का उपयोग कर जावास्क्रिप्ट में स्ट्रिंग को पार्स करना 3. अभिव्यक्ति की एक स्ट्रिंग बनाना (यानी। पैरामीटर के साथ फ़ंक्शन कॉल) 4. स्ट्रिंग अभिव्यक्ति पर एक eval() निष्पादित करना।

मुझे लगता है कि आप एक स्ट्रिंग भी पारित कर सकते हैं जो जावास्क्रिप्ट सरणी में evals।

टॉम

0

केवल मुद्दा तथ्य यह है कि अपने वेब ब्राउज़र नियंत्रण लोड नहीं है और जावास्क्रिप्ट समारोह बुलाया जा रहा है की वजह से (के रूप में मैं एक ही सामना करना पड़ा है)।

उत्तर में से एक के रूप में, यह संकेत दिया गया है।

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