2013-09-02 8 views
6

मैं एंगुलरजेस फोन ट्यूटोरियल के माध्यम से चल रहा हूं और रिमोट सर्वर से फोन JSON प्राप्त करना चाहता हूं।Angularjs http.get विफलता (लेकिन मुझे लगता है कि डेटा वापस कर दिया गया था)

$http.get('http://myserver.com/phones.json').success(function(data) { 
    $scope.phones = data; 
}); 

यह CORS के कारण विफल, मैं GET अनुरोध एक विकल्प भेज रहा था नहीं, इसलिए मैं नियंत्रक को यह पहली पंक्ति जोड़ा

delete $http.defaults.headers.common['X-Requested-With'];  

मैं अब चार्ल्स में देख सकते हैं कि एक विकल्प नहीं मिल myserver.com पर अनुरोध किया जा रहा है, और फोन जेएसओएन प्रतिक्रिया में है। लेकिन http.get अभी भी स्थिति 0 और 'डेटा' के साथ विफल रहा है शून्य है।

सुनिश्चित नहीं है कि आगे क्या प्रयास करें। किसी भी अंतर्दृष्टि की सराहना की।

+0

कोशिश जोड़ने '? कॉलबैक =?' अपने यूआरएल – tymeJV

उत्तर

2

इसे किसी GET के लिए विकल्प अनुरोध नहीं करना चाहिए, इसलिए यह सही लगता है। मुझे लगता है कि आप क्या करना चाहते हैं:

$http.get('http://myserver.com/phones.json').then(function(data) { 
    $scope.phones = data; 
}, function(err) { alert('Oh no! An error!'}); 

मुझे लगता है कि आप then(), जो तर्क के रूप में दो कार्यों लेता है का उपयोग करना चाहते - सफलता के लिए पहले, और त्रुटि के लिए दूसरा। $http.get() एक वादा देता है जिसे then() पर कार्य किया जाता है।

इसके अलावा, आप शायद $resource बजाय $http उपयोग करना चाहते हैं। यह अमूर्त के एक उच्च स्तर प्रदान करता है, और एक अधिक पुन: प्रयोज्य शैली के लिए अनुमति देता है, http://docs.angularjs.org/api/ngResource $ संसाधन

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

चेक बाहर कोणीय डिबग उपकरण here। यह आपको दिखाता है कि स्कॉप्स में क्या उपलब्ध है, और प्रदर्शन डेटा दिखाता है।

+1

के अंत तक यह के रूप में काम करना चाहिए। ट्यूटोरियल कहता है "$ http.get सेवा एक सफल विधि के साथ एक वादा वस्तु देता है। हम इस विधि को एसिंक्रोनस प्रतिक्रिया को संभालने और दायरे में फोन डेटा असाइन करने के लिए कहते हैं।" मैंने ** सफलता ** के साथ ** ** ** ** उसी परिणाम के साथ ब्लॉक किया है, इसे एक सेवा के रूप में लिखा है, आदि। मेरा लक्ष्य सबसे सरल http अनुरोध डेमो है, संसाधन संसाधन नहीं। मैं हमेशा चार्ल्स प्रतिक्रिया में JSON देखता हूं लेकिन http.get स्थिति 0 देता है। अब तक मुझे स्थानीय फ्लैट फ़ाइल उदाहरणों के बाहर कोई क्रॉस-डोमेन उदाहरण ऐप्स नहीं मिला है। –

+0

'$ http.defaults.useXDomain = true;' –

+0

जोड़ने का प्रयास करें, इसके साथ कोई भाग्य नहीं है, फिर भी स्थिति कोड 0, यह कोणीय के साथ एक बड़ी सीमा है। मैं http.jsonp विधि का उपयोग करने में देखता हूं जो एक्सएचआर का उपयोग नहीं करता है। –

0

ठीक है, अगर आप एक क्रॉस डोमेन अनुरोध कर रहे हैं, तो यह जानने के लिए कि आपको अनुमति है या नहीं, pre-flight request के रूप में एक विकल्प अनुरोध करने का अधिकार है। यदि CORS विफल रहता है तो आपके ब्राउज़र को डेटा प्राप्त होगा लेकिन यह एक त्रुटि फेंक देगा। तो, या तो आप अपने एचटीएमएल को एक ही डोमेन में डाल दें या सीओआरएस को अपने बैकएंड में जोड़ें (जो अधिक कठिन है)।

+1

मुझे सीओआरएस मुद्दे के आसपास मिल गया। लेकिन सीओआरएस की बात करना एक ऐप के बारे में इतना असामान्य है कि क्रॉस-डोमेन अनुरोध करना चाहते हैं? एक कोणीय ऐप 5 वितरित भौगोलिक सेवाओं को कैसे कॉल करेगा जिसे tweaked नहीं किया जा सकता है? –

+0

यह एक ब्राउज़र की सुरक्षा समस्या है जिसे एसओआर (समान उत्पत्ति पुलिस) कहा जाता है। खैर [सीओआरएस] (http://www.html5rocks.com/en/tutorials/cors/) यह एक HTML5 सुविधा है जो इसे सामान्य बनाने वाला है, अब आप बिना किसी हैक के क्रॉस-साइट अनुरोध कर सकते हैं। – pedroassis

+0

यहां एक अच्छा ट्यूटोरियल है जो मेरे प्रश्न का उत्तर देता है। –

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