2013-07-29 12 views
11

के लिए प्राप्त करें मैं JSON के लिए $ http.get चला रहा हूं और मुझे 0 की स्थिति मिल रही है। मैंने उसी JSON को डाउनलोड किया है और स्थानीय रूप से काम मिलते हैं, और अनुरोधों का उपयोग करके पायथन में पुस्तकालय मैं JSON कोई समस्या नहीं प्राप्त कर सकता, लेकिन AngularJS में यह काम नहीं कर रहा है। मुझे समझ में नहीं आता है कि क्यों कोणीय इसे प्राप्त नहीं कर रहा है लेकिन बाकी सब कुछ है। नीचे कोड स्निपेट।AngularJS से HTTP स्थिति 0 JSON

function AgentListCtrl($scope, $http) { 
    $http.get('http://foo.bar/api/objects').success(function(data) { 
    $scope.objects = data; 
}).error(function(data, status) { 
    $scope.status1 = status; 
}); 

यह JSON प्रदान करता है और जब एक स्थानीय फ़ाइल का उपयोग कर यह पार्स करता है, लेकिन अन्यथा यह विफल रहता है और सेट status1 0.

उत्तर

2

अपने कोड में करने के लिए, स्थिति असाइनमेंट केवल तब होता है जब त्रुटि होता है।

success(function(data, status, headers, config) { 
    $scope.objects = data; 
    $scope.status1 = status; 
}).error(function(data, status) { 
    $scope.status1 = status; 
}); 
+0

लेकिन यह अभी भी एक त्रुटि उठा रहा है और वास्तव में यह सामग्री प्राप्त नहीं कर रहा है जब यह सर्वर से खींच रहा है जब इसे स्थानीय से ठीक जेसन मिल गया। मुझे लगता है कि स्थिति 0 कोड उतना महत्वपूर्ण नहीं है जितना मैंने सोचा था, यह वास्तव में जेसन प्राप्त करने में विफलता है। –

+1

इसे सर्वर से खींच रहा है? सुनिश्चित करें कि आप किसी अन्य डोमेन पर होस्ट किए गए एपीआई को कॉल नहीं कर रहे हैं। चूंकि जावास्क्रिप्ट डिफ़ॉल्ट रूप से क्रॉस डोमेन एपीआई कॉल की अनुमति नहीं देता है। – zsong

+0

ऐसा लगता है कि वास्तव में क्या हो रहा है। धन्यवाद। जब तक मैं इसे सर्वर पर धक्का नहीं देता तब तक मैं स्थानीय फ़ाइल के साथ काम करूंगा। –

20

बस इस स्पष्ट करना के बाद से सीधे (लेकिन अपने टिप्पणी में) ऊपर जवाब में कहा गया है नहीं है और, मेरी तरह, कुछ: आप स्थिति जब कॉल इस तरह सफलतापूर्वक बनाया गया था प्राप्त करने के लिए सक्षम होना चाहिए कोणीय newbies इस पर कुछ समय बिताने जा सकता है:

  • कोणीय के $ संसाधन एक और सर्वर पर एक बाकी क्रिया निष्पादित करने के लिए, बारी में (एक status 200 साथ) सही ढंग से जवाब देंगे जो सक्षम हो जाएगा। कोणीय एक क्रिप्टिकल संदेश के साथ असफल रहेगा, जो स्थिति 0 द्वारा पहचाना जा सकता है। ब्राउज़र के डीबगर में यह और भी भ्रामक है, आप वास्तव में सर्वर का जवाब देख सकते हैं।

  • कोणीय क्रॉस-डोमेन अनुरोध पर कम से कम OPTIONS अनुरोध करेगा (कम से कम डिफ़ॉल्ट query() विधि के लिए) जब तक इसके विपरीत निर्दिष्ट नहीं किया जाता है। आम तौर पर सर्वर वांछित सामग्री (यानी आपका प्रतिनिधित्व) के साथ जवाब नहीं देगा। प्रति अनुरोध करने का एक आसान तरीका 'GET' होने का तरीका निर्दिष्ट कर रहा है।

    $resource('http://yourserver/yourentity/:id', {}, {query: {method: 'GET'}); 
    
  • सर्वर आपके बाकी अनुरोध का जवाब देने चाहिए क्रम में हेडर CORS [1] द्वारा निर्दिष्ट शामिल ठीक से प्रतिक्रिया का उपभोग करने के कोणीय अनुमति देने के लिए। अनिवार्य रूप से इसका मतलब है कि आपकी प्रतिक्रिया में Access-Control-Allow-Origin हेडर सहित, सर्वर से निर्दिष्ट करें कि अनुरोध कहां से आता है, इसकी अनुमति है। यह मान * हो सकता है।

वसंत-डेटा-आराम-webmvc के साथ किसी को एकीकृत AngularJS के लिए इस उत्तर के पूरक:

  • HATEOAS json स्वरूपित प्रतिक्रिया ठीक से कोणीय से भस्म नहीं दिया जाएगा, इसके त्रुटि Expected response to contain an array but got an object उत्पादन । $resouce की कॉन्फ़िगरेशन में isArray: false पैरामीटर जोड़कर हल किया जाता है;

  • वसंत-डेटा-आराम-webmvc परिदृश्य के लिए विन्यस्त करने CORS का एक बहुत ही करने वाली सूत्री उदाहरण [2] (देखें SimpleCORSFilter)

[1] https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

में प्रस्तुत किया जाता है

[2] https://spring.io/guides/gs/rest-service-cors/

+3

ध्यान दें कि कोणीय विकल्प/प्रीफलाइट अनुरोध स्वयं नहीं करता है। ब्राउज़र करता है। वास्तव में, कोणीय को इस अनुरोध का कोई ज्ञान नहीं है, यह क्लाइंट-साइड कोड के लिए पूरी तरह से पारदर्शी है। –

+0

@ रे-निकोलस दिलचस्प। क्या आप इस पर किसी भी संदर्भ को इंगित कर सकते हैं? – h7r

+0

यह कोर की मूल अवधारणा है। आपने कई स्थानों पर सीओआरएस के बारे में पढ़ा है, जैसे कि [सीओआरएस स्पेक] (http://www.w3.org/TR/cors/) या [यह एमडीएन आलेख] (https://developer.mozilla.org/en- यूएस/डॉक्स/एचटीटीपी/एक्सेस_control_CORS) –

1

मुझे एक जैसी समस्या थी। एक तृतीय पक्ष एपीआई जो जेएसओएन को हर दूसरे माध्यम से ठीक करता है, वह एंगुलर की $ http.get() विधि के माध्यम से कॉल करते समय स्थिति 0 के साथ विफल रहा था।

मेरे मामले में कोई सीओआरएस समस्या नहीं थी। इसके बजाय, मैं जिस यूआरएल का उपयोग एपीआई के लिए कर रहा था वह बिल्कुल सही नहीं था और सर्वर 301 प्रतिक्रिया जारी कर रहा था। कोणीय रीडायरेक्ट का सम्मान नहीं कर रहा था।

बुद्धिमानों के लिए शब्द।

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