2015-04-05 4 views
6

मेरे एप्लिकेशन के एडाप्टर में, मैं AJAX त्रुटियों के आधार पर त्रुटि कोड लौटा रहा हूं। मैं इन्हें एप्लिकेशन रूट की त्रुटि विधि में प्रबंधित कर रहा हूं। यदि मैं लिंक-टू के माध्यम से मार्ग तक पहुंचता हूं तो यह बहुत अच्छा काम करता है। लेकिन अगर मैं एक मार्ग रीफ्रेश करता हूं या बस यूआरएल टाइप करता हूं, तो मेरे एप्लिकेशन के एरर हैंडलर को नहीं कहा जाता है। क्या कोई ऐसी जगह है जहां मैं यह त्रुटि प्रबंधन कर सकता हूं जिसे हर बार चलाने की गारंटी दी जाएगी? मैं वास्तव में एक ही मार्ग में "अगर 401, लॉगिन दिखाएं" कोड को लागू नहीं करना चाहता हूं।एम्बर में ग्लोबल अजाक्स त्रुटि को संभालने में मैं कहां रख सकता हूं?

मार्गों/application.js:

export default Ember.Route.extend({ 
    actions: { 
    error: function(reason) { 
     if (reason === 401) { 
      alert('401'); 
      this.send('showLogin'); 
     } 
    }, 

एडेप्टर/application.js:

import DS from 'ember-data'; 

export default DS.ActiveModelAdapter.extend({ 
    'namespace': '', 
    ajaxError: function(jqXHR) { 
    var error = this._super(jqXHR); 
    if (jqXHR && jqXHR.status === 401) { 
     return 401; 
    } 
    return error; 
    } 
}); 

संपादित करें:

ऊपर कोड लगभग मेरे लिए काम किया। मुख्य मुद्दा जो मैंने मारा था, यह था। यूआरएल को रीफ्रेश करने या मारने पर यह .end ('showLogin') पकड़ा नहीं जा रहा था। एक transitionTo को यह बदल रहा है अच्छा काम करता है:

import Ember from 'ember'; 

export default Ember.Route.extend(ApplicationRouteMixin, { 
    actions: { 
    error: function(reason) { 
     if (reason === 401) { 
     this.transitionTo('login'); 
     } 
    }, 
    ... 
+0

मुझे यह समस्या भी है और वैश्विक समाधान नहीं मिला। क्या आपने कभी इसे हल किया है? मैंने एक समान प्रश्न पोस्ट किया: http://stackoverflow.com/questions/29926638/ember-handling-401s-revisited-in-2015 – Confused

+0

हाँ, मुझे अंत में यह काम मिल गया। उपरोक्त संपादन देखें। – Dennis

उत्तर

0

आप

Ember.RSVP.on('error', function(error) { 
    // ... 
}); 

RSVP वादों का उपयोग कर रहे हैं, तो या आप आप कर सकते हैं सादा jQuery XHR

$(document).ajaxError(function(evt, jqXHR) { 
    // ... 
}); 
+0

यह निश्चित रूप से काम करता है, लेकिन मैं इसे वैश्विक स्तर पर संभालने की उम्मीद कर रहा था। मैं उन्हें एडाप्टर में सभी पकड़ सकता हूं और एक त्रुटि लौटा सकता हूं, लेकिन एप्लिकेशन रूट हमेशा मुझे पकड़ने की तरह नहीं पकड़ता है। – Dennis

1

उपयोग कर रहे हैं एक एप्लिकेशन एडाप्टर, और उसके बाद से प्रत्येक एडाप्टर का विस्तार, और isInvalid समारोह का उपयोग करें।

//app/adapters/application.js 
import DS from 'ember-data'; 
import Ember from 'ember'; 

export default DS.JSONAPIAdapter.extend({ 

    isInvalid(status, headers, payload){ 
     if (status===401) {} 
    }, 

}); 

//app/adapters/anotherAdapter.js 

import AppAdapter from 'yourapp/adapters/application'; 

export default AppAdapter.extend({ 

}); 
संबंधित मुद्दे