2011-11-04 15 views
25

मेरे पास एक ऐसी स्थिति है जहां मैं एक व्यवस्थापक क्षेत्र में विभिन्न एक्स ग्रिड पैनलों आदि से सर्वर पर AJAX अनुरोध कर रहा हूं। यदि उपयोगकर्ता के लिए कोई गतिविधि नहीं है तो लॉग इन उपयोगकर्ता लॉग आउट हो जाएगा। 5 मिनट जो सामान्य है। इस मामले में सर्वर लॉगिन पृष्ठ पर रीडायरेक्ट 403 वापस भेजता है। हर स्टोर के प्रॉक्सी जो एक छोटे से overkill हैEXTJS 4 - वैश्विक अपवाद श्रोता

listeners:{ 
    exception: function(proxy, response, operation, eOpts) { 
     if(response.status == '403') 
     window.location = 'login'; 
    } 
} 

: अभी मैं एक डालने कर रहा हूँ।
क्या कोई दयालु हो सकता है और मुझे बताएं कि मैं ExtJS और सर्वर के बीच सभी संचारों में श्रोता कैसे जोड़ सकता हूं? मैं एमवीसी एप्लीकेशन आर्किटेक्चर का उपयोग कर रहा हूं, इसलिए यह शायद नियंत्रक.जेएस या ऐप.जे.एस. में एक लाइनर हो सकता है। धन्यवाद

उत्तर

28

अपने ऐप की शुरुआत में निम्न स्निपेट डालें। इस प्रत्येक प्रतिक्रिया के साथ, चाहे वह किसी स्टोर या किसी फॉर्म या ... से है, चेक किया जाएगा और लॉगिन पेज पर रीडायरेक्ट किया जाएगा।

Ext.Ajax.on('requestexception', function (conn, response, options) { 
    if (response.status === 403) { 
     window.location = 'login'; 
    } 
}); 
+1

में अधिक विवरण देखें, हम दोनों एक ही समय में इस सवाल का जवाब देने थे और दोनों एक ही जवाब दे दिया है। तो यह सही होना चाहिए। – nightwatch

+0

बुल की आई! बहुत बहुत धन्यवाद –

+0

अच्छा, बहुत बहुत धन्यवाद – pylover

7

मैं सच में यकीन है कि अगर यह सब ajax अनुरोध को पकड़ने, लेकिन आप सर्वर के साथ संचार के लिए AjaxProxy उपयोग कर रहे हैं यह काम करना चाहिए यह सोचते हैं जाएगा नहीं कर रहा हूँ: Ext.Ajax सिंगलटन में 'requestexception' घटना को संभालने कुछ इस

Ext.Ajax.on('requestexception', function(conn, response, options, eOpts) { 
    //your error handling here 
}); 

जैसे मैं इसे करने की कोशिश नहीं की है, लेकिन अगर आप ऐसा करेंगे, तो आप यहां अद्यतन पोस्ट कर सकता है?

+0

@Sascha, नाइटवॉच आप दोनों को धन्यवाद। यह बढ़िया काम करता है। – user798612

6

एक और पूरा समाधान है, जिसमें यह एक कैच-ऑल हो जाएगा यह है:

Ext.util.Observable.observe(Ext.data.Connection, { 
    requestexception: function(conn, response, options) { 
     if(response.status == '403') 
      window.location = 'login'; 
    } 
}); 

इसका कारण यह है अंतर्निहित वर्ग, Ext.data.Connection न केवल Ext.Ajax में प्रयोग किया जाता है, लेकिन साथ ही Ext.data.Proxy के रूप में प्रयोग किया जाता है कि Ext.data.Store, Ext.data.Model द्वारा। यह store.load() और model.save() जैसी कॉलों पर अपवादों को संभालता है। यह एक अधिक पूर्ण पकड़-सभी हैंडलर होना चाहिए।

अजीब my blog post.

+0

Ext.util.Observable.observe Ext JS 5.x में कोई फ़ंक्शन नहीं है। आपको Ext.Ajax.on – jprism

+0

का उपयोग नहीं करना है, आप नहीं करते हैं, और हाँ एक्सएस जेएस 5.0.1 में टाइप करें 'टाइपऑफ Ext.util.Observable.observe'' 'फ़ंक्शन' ' – EricLavault