2012-08-14 11 views
6

में अपरिभाषित मेरी वेबसाइट को एक्सटी जेएस 4.1 फ्रेमवर्क और एएसपी .NET MVC v3 का उपयोग करके बनाया गया है। जब नया फ्रेम प्रस्तुत किया जाता है तो JSON- प्रारूप में डेटा पुनर्प्राप्त करने के लिए 19 अलग AJAX अनुरोध होते हैं। सभी अनुरोध परिचित हैं और Ext.Ajax.request() द्वारा किए गए हैं। उदाहरण:request.xhr Ext JS

Ext.Ajax.request({ 
    url: getOrderLink, 
    method: "GET", 
    params: { recId: orderRecId }, 
    headers: { 
     'Accept': 'application/json' 
    }, 
    success: function (response) { 
     var order = Ext.decode(response.responseText); 
     ... 
    } 
}); 

कुछ मामलों में वहाँ

onStateChange : function(request) { 
    if (request.xhr.readyState == 4) { 
     this.clearTimeout(request); 
     this.onComplete(request); 
     this.cleanup(request); 
    } 
}, 

ताकि request.xhr.readyState अपवाद फेंकता है "संपत्ति पढ़ा नहीं जा सकता है, जहां अनुरोध कोई संपत्ति XHR है में ext-all.js में त्रुटियों 'हैं READSTATE 'अपरिभाषित'। यह त्रुटियां सभी अनुरोधों के लिए नहीं दिखाई देती हैं और साइट कार्य को प्रभावित नहीं करती हैं (प्रतिक्रियाएं सफलतापूर्वक पुनर्प्राप्त की जाती हैं)। कुछ बार यह त्रुटियां बिल्कुल दिखाई नहीं देती हैं। सभी अनुरोधों के लिए टाइमआउट डिफ़ॉल्ट रूप से 30s पर सेट होता है और उनमें से प्रत्येक को लगभग 1.5-2 सेकंड लगते हैं। मैं Google क्रोम 21 का उपयोग कर रहा हूं। क्या आप कृपया मुझे कुछ विचार दे सकते हैं कि यह क्यों हो रहा है।

+0

यह वास्तव में वायर्ड है। यदि आप क्रोम के डेवलपर टूल्स के नेटवर्क/एक्सएचआर टैब को देखते हैं, तो क्या आप 100% सुनिश्चित हैं कि सभी यूआरएल वैध हैं, कि सभी सर्वर कॉल अपवाद के बिना वापस आते हैं, और सभी प्रतिक्रियाएं सही डेटा के साथ वापस आती हैं? – Izhaki

+0

अधिकांश ब्राउज़रों में प्रति डोमेन ~ 6 समवर्ती अनुरोधों की ऊपरी सीमा होती है। यदि आप एक बार में सभी 19 अनुरोध भेज रहे हैं, तो चीजें हाथ से बाहर हो सकती हैं। क्या आप अनुरोधों की संख्या को मैन्युअल रूप से थ्रोटलिंग करने का प्रयास कर सकते हैं? कहें, अगले 6 भेजने से पहले 6 खत्म होने की प्रतीक्षा करें? सुनिश्चित नहीं है कि इससे समस्या हल हो जाएगी, लेकिन यह एक शुरुआत है। – Eric

+0

@Izhaki, वेब डेवलपर टूल दिखाते हैं कि सभी यूआरएल सही थे और अधिकतम 1.5 सेकंड के बाद प्रतिक्रियाएं पुनर्प्राप्त की गईं। अजीब चीज यह है कि 7 का केवल 1 बार ऐसी त्रुटि देता है। अन्य सामान्य हैं। –

उत्तर

2

समस्या तब होती है जब केवल आपके पास ब्रेकपॉइंट या "डीबगर" होता है; AJAX से संबंधित किसी भी चीज़ में लाइन। मेरे लिए यह क्रोम में हुआ, अभी तक अन्य ब्राउज़रों की कोशिश नहीं की है।

मेरे मामले में ऐसा हुआ जब मैंने एक लोड इवेंट हैंडलर में ब्रेकपॉइंट सेट किया था, जैसे कि नीचे दिए गए कोड उदाहरण।

लेकिन त्रुटि तब होती है जब आप स्वयं को फ्रेमवर्क में Ext onStateChange फ़ंक्शन के अंदर ब्रेकपॉइंट सेट करते हैं।

यदि आपके ब्रेकपॉइंट्स को अक्षम करना और debugger; कॉल उस त्रुटि को हटा देती है जिसे आप सुरक्षित रूप से अनदेखा कर सकते हैं!

There is a similar thread on ExtJS forums. Sencha might add a fix.

Ext.define('MyApp.controller.MyController', { 
    extend: 'Ext.app.Controller', 

    stores: ['Projects'], 

    init: function() { 
     this.getProjectsStore().addListener(
      "load", 
      this.onProjectsStoreLoaded, 
      this 
     ); 
    }, 

    onProjectsStoreLoaded: function() { 
     console.log('MyController: onProjectsStoreLoaded'); 

     debugger; // <- this causes the errors to appear in the console 

     SomeOtherThingsIWantedToDebug(); 
    } 
}