2016-11-28 15 views
7

Response from serverएक्सेस करना AngularJS

में कस्टम HTTP प्रतिसाद शीर्षलेख मैं शीर्ष लेख 'त्रुटि-विस्तार' का उपयोग करने के रूप में आप ब्राउज़र नेटवर्क निरीक्षक में देख सकते हैं (ऊपर लिंक), हेडर लौटे हो जाता है कोशिश कर रहा हूँ। सर्वर-वार मैंने क्रॉस-डोमेन अनुरोधों को अनुमति देने के लिए 'एक्सेस-कंट्रोल-एक्सपोज़-हेडर' पर कस्टम हेडर भी जोड़ा है क्योंकि इसे अन्य प्रश्नों पर ठीक करने का सुझाव दिया गया था।

नीचे सफलता/त्रुटि कॉलबैक के साथ सर्वर का अनुरोध है।

this.signon = function (request, onComplete, onError) { 
    console.log("Calling server with 'login' request..."); 

    return $http.post("http://localhost:8080/markit-war/services/rest/UserService/login/", request) 
     .then(onComplete, onError); 
}; 

var onLookupComplete = function(response) { 
    if (response.data.username) 
    { 
     //If user is returned, redirect to the dashboard. 
     $location.path('/dashboard'); 
    } 

    $scope.username = response.data.username; 
}; 

var onError = function(response) { 
    $scope.error = "Ooops, something went wrong.."; 
    console.log('error-detail: ' + response.headers('error-detail')); 
}; 

जब मैं नीचे के रूप में देखा प्रतिक्रिया हेडर का उपयोग का प्रयास करें:

console.log(response.headers()); 
    console.log('error-detail: ' + response.headers('error-detail')); 

यह केवल आउटपुट: सामग्री प्रकार: "application/json" त्रुटि विवरण: अशक्त

है वहाँ एक कारण है कि त्रुटि ऑब्जेक्ट हेडर प्रतिक्रिया ऑब्जेक्ट पर मैप नहीं किया जा रहा है?

+0

देखते हैं कि आप response.headers()। त्रुटि विस्तार कर सकते हैं? – user2085143

+0

@ user2085143 नहीं, निश्चित रूप से यह कानूनी वाक्यविन्यास नहीं है? –

+0

शायद नहीं, लेकिन यह सुनिश्चित नहीं है कि प्रतिक्रिया क्या है। शीर्षलेख() वास्तव में वापस आते हैं। क्या आपने इस http://stackoverflow.com/questions/220231/accessing-the-web-pages-http-headers-in-javascript – user2085143

उत्तर

8

मुझे लगता है कि आप सही रास्ते पर हैं। कस्टम हेडर तक पहुंच प्राप्त करने के लिए, आपके सर्वर को यह विशेष Access-Control-Expose-Headers शीर्षलेख सेट करने की आवश्यकता है, अन्यथा आपका ब्राउज़र केवल Mozilla docs में सूचीबद्ध 6 पूर्वनिर्धारित शीर्षलेख मानों तक पहुंच की अनुमति देगा।

आपके स्क्रीनशॉट में ऐसा हेडर प्रतिक्रिया में मौजूद नहीं है। प्रतिक्रिया में उपस्थित होने के लिए आपको इस कोर हेडर के लिए बैकएंड पर एक नज़र रखना चाहिए।

5

यह एक CORS समस्या है। चूंकि यह एक क्रॉस-मूल अनुरोध है, ब्राउज़र शीर्ष पर छिपा रहा है। सर्वर को इसकी प्रतिक्रिया में Access-Control-Expose-Headers शीर्षलेख शामिल करने की आवश्यकता है।

Access-Control-Expose-Headers1 प्रतिक्रिया हेडर इंगित करता है कि कौन से शीर्षकों को उनके नाम सूचीबद्ध करके प्रतिक्रिया के हिस्से के रूप में उजागर किया जा सकता है।

डिफ़ॉल्ट रूप से, केवल 6 सरल प्रतिक्रिया हेडर संपर्क में हैं:

  • कैश-नियंत्रण
  • सामग्री-भाषा
  • सामग्री प्रकार
  • समय-सीमा समाप्त
  • Last-Modified
  • प्रगमा

यदि आप चाहते हैं कि ग्राहक अन्य शीर्षलेखों तक पहुंचने में सक्षम हों, तो आपको Access-Control-Expose-Headers शीर्षलेख का उपयोग करके उन्हें सूचीबद्ध करना होगा।

अधिक जानकारी के लिए MDN HTTP Header -- Access-Control-Expose-Headers

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