2009-06-30 14 views
5

ExtJS 2.2.1 का उपयोग करके, मेरे पास एक कंटेनर तत्व है जो सर्वर से एचटीएमएल का एक टुकड़ा लोड करने वाला है:ExtJS: IEL में ऑटोलोड काम नहीं करता है

autoLoad: { url: 'someurl' } 

यह फ़ायरफ़ॉक्स में ठीक काम करता है, लेकिन आईई 7 के लिए यह एक वाक्यविन्यास त्रुटि में परिणाम देता है लाइन 7170 पर ext-all-debug.js में:

 this.decode = function(json){ 
    return eval("(" + json + ')'); 
}; 

मैंने उस फ़ंक्शन को इस मोड़ को बदलकर इसे ठीक किया:

 this.decode = function(json){ 
    return eval('(function(){ return json; })()'); 
}; 

फिर ऑटोलोड दोनों ब्राउज़रों में अच्छी तरह से काम करता है, लेकिन फिर कुछ विषमता है बग और इसके अलावा, आप वास्तव में ExtJS लाइब्रेरी में इसे ठीक नहीं करना चाहते हैं क्योंकि यह अनजान होगा (विशेष रूप से minified ext-all.js में जो एक पंक्ति पर जावास्क्रिप्ट के आधे मेगाबी की तरह है)।

मैं इस बग के बारे में बहुत कुछ नहीं ढूंढ पाया।

विविधताएं जो मैंने कोशिश की हैं:

// With <script> tags around all the HTML 
autoLoad: { url: 'someurl', scripts: true } 
// With <script> tags around all the HTML 
autoLoad: { url: 'someurl', scripts: false } 

और <script> टैग के बिना वीज़ा बनाम। एचटीएमएल में कोई जावास्क्रिप्ट नहीं है, लेकिन यह संभव होना चाहिए, क्योंकि अंततः हम लौटाए गए HTML के अंदर जावास्क्रिप्ट का उपयोग करेंगे।

समस्या HTML में नहीं है क्योंकि यहां तक ​​कि सबसे आसान संभव HTML के साथ, त्रुटि वही है।

अद्यतन - donovan को प्रतिक्रिया:

सबसे सरल मामला जहां इसका उपयोग किया जाता है यह है:

changeRolesForm = new Ext.Panel({ 
     height: 600, 
     items: [{ autoScroll: true, autoLoad: WMS.Routing.Route("GetRolesList", "User") + '?userID=' + id}] 
    }); 

यहां कोई डेटास्टोर शामिल नहीं है। प्रतिक्रिया-प्रकार text\html भी है, जेसन नहीं, इसलिए यह इसे भ्रमित नहीं कर सकता है। और जैसा कि कहा गया है, यह फ़ायरफ़ॉक्स में ठीक काम कर रहा है, और फ़ायरफ़ॉक्स में, यह एक ही eval फ़ंक्शन निष्पादित करता है, लेकिन त्रुटि के बिना। तो ऐसा नहीं है कि फ़ायरफ़ॉक्स निष्पादन के एक अलग पथ का पालन करता है, यह वही है, लेकिन eval पर त्रुटि के बिना।

+0

कोई भी "उत्तर" इस ​​तथ्य को संबोधित नहीं करता है कि त्रुटि केवल आईई में होती है। हम अभी भी Ext 3.3.0 में एक ही चीज़ का अनुभव कर रहे हैं। –

+0

हाय जूलियन, यदि आप फायरबग में देखते हैं, तो सर्वर से क्या लौटाया जाता है? एक्स सर्वर के लिए कॉल करता है जिसके बाद यह आईई में मर जाता है, यह उपयोगी होगा अगर अनुरोध और प्रतिक्रिया पोस्ट की जाती है (हेडर समेत) –

+0

मैं रॉब प्रॉक्सी का उपयोग करने के लिए रॉब प्रॉक्सी का उपयोग करने की सलाह देता हूं, क्योंकि आईई डीबग टूल्स भयानक हैं –

उत्तर

2

मैं समस्या के स्रोत स्थित है और यह वास्तव में ExtJS के साथ नहीं था: आदेश में वहाँ के लिए सिंटैक्स त्रुटि JSON अवश्य होना चाहिए कि नहीं किया जाना है। उस एप्लिकेशन में एक अनुभाग था जिसने Ext.Ajax 'requestcomplete' ईवेंट की बात सुनी और प्रतिक्रिया को डीकोड करने का प्रयास किया। जेसन को प्रतिक्रिया दें, भले ही प्रतिक्रिया HTML थी (जो केवल एक या दो मामलों में है)। आईई इस से खुश नहीं था।

1

यदि आप किसी पैनल या तत्व में स्वत: लोड कर रहे हैं तो एक JSON डीकोड भी प्रक्रिया में शामिल नहीं होना चाहिए। UpdateManager बस Ext.Element.update (..) को रोकता है जो HTML की एक स्ट्रिंग लेता है।

एकमात्र कारण है कि मैं सोच सकता हूं कि आपकी प्रतिक्रिया को JSON के रूप में पार्स किया जाएगा यदि आप अनुरोध करने के लिए JSONStore का उपयोग कर रहे थे - आप क्या उपयोग कर रहे हैं?

तुम कुछ इस तरह सरल करने के लिए सक्षम होना चाहिए:

 
var panel = new Ext.Panel({ 
    autoLoad: 'someurl' // this is the short form, you can still use the object config 
}); 

या

 
var element = Ext.get('element id').update({ 
    url: 'someurl' 
}); 

रिस्पांस अद्यतन करने के लिए:

यह सही लग रहा है जब तक कुछ अजीब के रूप में नहीं हो रहा है WMS.Routing.Route (...) विधि के साथ। मैं वास्तव में वर्तमान में एक एक्स्टजेस एप्लिकेशन पर काम कर रहा हूं इसलिए मैं कुछ अलग सर्वर प्रतिक्रियाओं का त्वरित परीक्षण करने में सक्षम था और आपकी समस्या को पुन: उत्पन्न नहीं कर सका। मैंने ExtJS 2.2.1 स्रोतों पर भी पुनः प्रयास किया है और अभी भी संबंधित एलिमेंट अपडेट और अपडेट मैनेजर में कुछ भी नहीं देखा है जो आप देख रहे हैं Ext.util.JSON.decode (...) को कॉल करेंगे।

मैं कल्पना कर रहा हूं कि यह आपके आवेदन के किसी अन्य हिस्से में एक असंबंधित AJAX अनुरोध से है। यदि आप पहले से नहीं हैं, तो मैं इसे डीबग करने में सहायता के लिए फायरबग/फ़ायरबग लाइट का उपयोग करूंगा - विशेष रूप से यह सुनिश्चित करने के लिए कि आपकी समस्या का स्रोत वास्तव में यह ऑटोलोड है, एक स्टैक ट्रेस प्राप्त करने का प्रयास करें।

+0

धन्यवाद, मेरा अपडेट देखें। – JulianR

1

मुझे नहीं पता कि समस्या क्या है, लेकिन मैं यह इंगित करना चाहता था कि आपका "फिक्स" इसे जेसन को एक eval'd ऑब्जेक्ट की बजाय स्ट्रिंग के रूप में वापस कर देता है, इसलिए निश्चित रूप से अब कोई त्रुटि नहीं है - आपने कार्यक्षमता को हटा दिया। यह बस के रूप में बस हो सकता है:

this.decode = function(json){ 
    return json; 
} 

सामान्य शब्दों में, इस तरह यादृच्छिक त्रुटियों आम तौर पर Ext में एक बग, नहीं Ext.decode के रूप में के रूप में आमतौर पर इस्तेमाल किया कार्यों में संकेत नहीं है विशेष रूप से। मुझे लगता है कि या तो JSON में कुछ ऐसा है जो IE को पसंद नहीं करता है कि अन्य ब्राउज़र अनदेखा करते हैं, या अधिक संभावना है, आपके ऐप में कुछ अप्रत्याशित चल रहा है जो आपके विवरण से स्पष्ट नहीं है। क्या आपने यह देखने के लिए फ़ायरबग में अपने अनुरोध लॉग का निरीक्षण करने का प्रयास किया है कि JSON वास्तव में कैसा दिखता है? क्या आपने पैनल को पॉपुल करने से पहले अपनी सामग्री को सत्यापित करने के लिए अपने रूट कॉल का परिणाम पहले एक चर में प्राप्त करने का प्रयास किया है? साथ ही, फ़ायरबग में "सभी त्रुटियों पर ब्रेक" विकल्प को सही करने का प्रयास करें - कई बार जब आप अपने स्टैक ट्रेस के शीर्ष पर एक्स्ट से यादृच्छिक फ़ंक्शन प्राप्त करते हैं, तो अपराधी वास्तव में कुछ एप्लिकेशन कोड होता है जो आप नहीं थे उम्मीद।

4

अपने JSON की जांच करें। एफएफ जेएसओएन ऑब्जेक्ट्स में पिछली कॉमा को अनुमति देता है जबकि आईई नहीं करता है। जैसे

{foo:'bar',baz:'boz',} 

एफएफ में काम करेगा लेकिन आईई में यह एक वाक्यविन्यास त्रुटि फेंक देगा।

{foo:'bar',baz:'boz'} 
1

मुझे एक ही समस्या थी, मेरी अंग्रेजी क्षमा करें, मैं मेज़िको से हूं, मुझे उम्मीद है कि मैं मदद कर सकता हूं ... जब मैं लॉगिन करने के लिए फॉर्म सबमिट करता हूं तो मेरी समस्या ट्रिगर होती है, मेरा PHP विफलता के मामले में प्रतिक्रिया के साथ JSON देता है इस तरह:

$respuesta = "{success: false, msgError: 'El usuario o contrase&ntilde;a son incorrectos'}"; 

लेकिन मैं एक resposne नहीं भेज रहा था जब यह सफलता, अच्छी तरह से जब यह एक सच्ची सफलता है, तो ExtJS यह मेरे JSON उत्तर डिकोड करने के लिए कोशिश कर रहा था, लेकिन डिकोड करने के लिए कुछ नहीं था, मैं अनुमान लगाओ कि, मेरे मामले में फिर से, समस्या ... मैंने सच्चे succes, एफएफ, क्रोम, सफारी के लिए प्रतिक्रिया वापस भेजने का हल किया, समस्या को पकड़ नहीं है, लेकिन ओपेरा और आईई 8 करता है ... मुझे उम्मीद है कि मैं किसी की मदद करता हूं, अलविदा

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