2013-07-26 16 views
13

मैं AngularJS के लिए नया हूं, और एक ऐप बनाना जो सर्वर से बातचीत करेगा। सर्वर में एक आरईएसटी एपीआई है, लेकिन सादे पाठ के साथ कुछ और जेएसओएन वाले लोगों के लिए कुछ तरीकों का जवाब देती है। मैंने AngularJS '$resource सेवा का उपयोग कर एक सरल http अनुरोध विधि लागू की है।सादे पाठ सर्वर प्रतिक्रिया को कैसे संभालें?

हालांकि, जब सर्वर प्रतिक्रिया सादा पाठ है, तो AngularJS में प्रतिक्रिया प्रतिक्रिया शब्द में प्रत्येक वर्ण के लिए एक प्रविष्टि वाला एक ऑब्जेक्ट है। मैं इस के आसपास कैसे हो सकता हूं (एक अच्छे तरीके से)? आदर्श रूप से, मैं सादे पाठ की अपेक्षा करते समय और जेएसओएन की अपेक्षा कब कर सकता हूं, और दोनों मामलों में अच्छी तरह से स्वरूपित प्रतिक्रिया प्राप्त करने के लिए अपनी सेवा बताने में सक्षम होना चाहूंगा।

+1

मुझे बिल्कुल वही समस्या है। आरईएसटी के अनुसार, एक पोस्ट ऑपरेशन की वापसी वस्तु नव निर्मित वस्तु के यूआरआई (या मेरे मामले में, एक आईडी) होना चाहिए। जेएसओएन होने के सभी प्रतिक्रियाओं को मानकर अंगुलर $ संसाधन सहायक में विफल रहता है। मुझे लगता है कि एक कस्टम प्रतिक्रिया हैंडलर इसे हल कर सकता है .. इसके साथ प्रयोग करेंगे। आपको पोस्ट रखें;) – Pepster

उत्तर

17

$ संसाधन आरामदायक वस्तुओं के साथ काम करने के लिए एक सुविधाजनक आवरण है। यह स्वचालित रूप से JSON के रूप में पार्स करने की कोशिश करेगा और ऑब्जेक्ट को $ संसाधन परिभाषा के आधार पर पॉप्युलेट करेगा।

आप गैर-सुरक्षित संसाधनों के लिए $http service का उपयोग करके बहुत बेहतर हैं।

यह एक निम्न स्तर का एपीआई है जिसमें इस तरह के अतिव्यापी ऑब्जेक्ट मैपिंग नहीं है।

उदा।

$http({method: "GET", url: "/myTextDocURL"}) 
    .success(function(data){ 
     // data should be text string here (only if the server response is text/plain) 
    } 
); 
+0

गैर-सुरक्षित संसाधनों के लिए क्यों ?? –

11

के अनुसार documentation आप एक संसाधन है कि डिफ़ॉल्ट व्यवहार है जो एक जावास्क्रिप्ट वस्तु के लिए json से प्रतिक्रिया कन्वर्ट करने के लिए ओवरराइड कर सकते हैं के लिए एक कस्टम कार्रवाई निर्दिष्ट करें। ट्रांसफॉर्मेशन फ़ंक्शन के 'डेटा' परम में आपका टेक्स्ट पेलोड होगा।

इस मामले में transformResponse विधि केवल स्ट्रिंग के बजाय स्ट्रिंग युक्त ऑब्जेक्ट देता है क्योंकि अन्यथा यह स्ट्रिंग को सरणी में परिवर्तित करने का प्रयास करेगा।

var Stub = $resource('/files/:filename', {}, {'getText': { 
     transformResponse: function(data, headersGetter, status) { 
      return {content: data}; 
     } 
    }}); 
संसाधन का उपयोग करने के

अपने कस्टम gettext() कार्रवाई के बजाय सादे पुराने get() फोन:

Stub.getText({'filename': 'someFile.txt'}, function(response) { 
     console.info("Content of someFile.txt = " . response.content); 
    }); 

यह एक पुरानी पोस्ट है लेकिन मैं इसे एक नया उत्तर लायक लगा।

+0

यह काम करता था और मेरे मामले में मैं जेसन डेटा को सादा/पाठ (उद्देश्य पर) के रूप में वापस कर रहा था लेकिन $ http अभी भी एक ऑब्जेक्ट में एक सादा स्ट्रिंग बना रहा था, इसलिए यह विधि सबसे अच्छी तरह से काम कर रही थी, साथ ही मैं अपने संसाधन का उपयोग अन्य के लिए भी कर सकता हूं कार्य करता है। धन्यवाद –

+0

धन्यवाद, एक आकर्षण की तरह काम करता है! – Tobi

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