2014-11-08 8 views
6

कैसे AngularJS यहाँ के माध्यम से वेब सेवा करने के लिए JSON डेटा पोस्ट करने के लिए बाकी वेब सेवा करने के लिए JSON डेटा पोस्ट करने के लिए कोड का टुकड़ाकैसे AngularJS

.controller('MessagePostCtrl', function($scope, $http) { 
    $scope.postMessage = function() { 
     var msg = document.getElementById('message').value; 
     var msgdata = { 
       message : msg 
      }; 
     var res = $http.post('http://<domain-name>/messenger/api/posts/savePost',msgdata); 
     res.success(function(data, status, headers, config) { 
      console.log(data); 
     }); 
    } 
}) 

विकल्प है http/savePost
ionic.bundle.js: 16,185 (अनाम समारोह) ionic.bundle.js: 16,185 sendReq ionic.bundle.js: 15,979 serverRequest ionic.bundle.js: 15,712 wrappedCallback ionic.bundle.js: 19197 wrappedCallback ionic.bundle.js: 1 9 1 9 7 (अनाम कार्य) ionic.bundle.js: 1 9 283 स्कोप। $ Eval ionic.bundle.js: 20326 स्कोप। $ Digest ionic.bundle.js: 20138 स्कोप। $ Ionic.bundle.js लागू करें: 20430 (अनाम कार्य) ionic.bundle.js: 43025 (अनाम कार्य) ionic.bundle.js: 10,478 foreach ionic.bundle.js: 7950 eventhandler ionic.bundle.js: 10477 triggerMouseEvent ionic.bundle.js: 2648 tapClick ionic.bundle.js: 2637 tapMouseUp ionic.bundle.js: 2707

XMLHttpRequest http: /// मैसेंजर/एपीआई/पोस्ट/सेवपोस्ट लोड नहीं कर सकता है। अमान्य HTTP स्थिति कोड 404

लेकिन जब मैं $ http.post विधि से msgdata निकालने के लिए, सब कुछ ठीक काम कर रहा है। किसी को भी मुझे बता सकते हैं जहां मुद्दा है वरना मेरे गाइड मदद

**Edited: 
The Issue was with the CORS, Im using codeigniter REST Controller for web-services. 
Modified the headers. If anyone has the same issue add the below header in the construct 

header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE"); 
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method"); 
if ("OPTIONS" === $_SERVER['REQUEST_METHOD']) { 
die(); 
} 
Thanks to Linial for the break-through, telling me where the issue is.** 
+0

क्या आपकी webservice JSON या फ़ॉर्म डेटा की अपेक्षा करता है? (उदा: "संदेश = परीक्षण और एक्स = test2") –

+0

webservice केवल JSON प्रारूप –

उत्तर

7

ठीक है के लिए वेब सेवा करने के लिए JSON डेटा भेजने के लिए कैसे

धन्यवाद,

आप चीजों की जोड़ी मिश्रित:

सबसे पहले जैसा कि मैं देख सकता हूं कि आपका अनुरोध POST से OPTIONS में बदल गया है।

क्यों?

आप क्रॉस-साइट HTTP अनुरोध (सीओआरएस) कर रहे हैं, जिसका अर्थ है कि आपका वेब ऐप और आपके बैकएंड एपीआई एक ही डोमेन में नहीं हैं।

लाइव क्या होता है यह है कि अनुरोध preflighted किया जा रहा है।

Preflighted अनुरोध: मोज़िला MDN द्वारा:

इसे पाने के सिर या पोस्ट के अलावा अन्य तरीकों का उपयोग करता। इसके अलावा, यदि एप्लिकेशन/एक्स-www-form-urlencoded, मल्टीपार्ट/फॉर्म-डेटा, या टेक्स्ट/सादा, के अलावा किसी सामग्री-प्रकार के साथ अनुरोध डेटा भेजने के लिए POST का उपयोग किया जाता है। यदि POST अनुरोध एप्लिकेशन/एक्सएमएल या टेक्स्ट/एक्सएमएल का उपयोग कर सर्वर पर एक्सएमएल पेलोड भेजता है, तो अनुरोध प्रीफलाइट किया गया है।

जिसका मतलब है, मिलता है, सिर या पोस्ट विकल्प करने के लिए परिवर्तन किया जाएगा और बगल में किसी भी अनुरोध: इसके अलावा, अगर तुलना में application/x-www-form-urlencoded, multipart/form-data, or text/plain

मैं अब दूसरे के साथ सामग्री प्रकार डेटा भेजने के लिए इस्तेमाल पोस्ट समझो, लेकिन क्या करना है? मुझे POST अनुरोध करना है!

आपके पास कई विकल्प नहीं हैं, क्योंकि सर्वर पर सीओआरएस परिभाषित किया गया है।

लेकिन ग्राहक पर आप ऐसा कर सकता है (उदाहरण): तो जैसे कोणीय में एनकोड प्रकार बदलने: $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";

या

अपने सर्वर को सेट तो जैसे CORS स्वीकृत करने के लिए:

Access-Control-Allow-Headers: Content-Type \\ This will allow you to set content type header in the client. 

Access-Control-Allow-Methods: GET, POST, OPTIONS \\ This will allow you to send GET POST and OPTIONS, which is necessary because of preflighted requests. 

Access-Control-Allow-Origin: * \\ This will allow anyone to perform CORS requests. 

शुभकामनाएं!

+1

धन्यवाद लिनियल, मुझे एहसास नहीं हुआ कि यह कोरस मुद्दा है। नियंत्रक में हेडर जोड़ना मेरे मुद्दों को हल करता है। –

+1

मुझे पता है कि यह पहले से ही स्वीकार कर लिया गया है, लेकिन मैं केवल इसे जोड़ने के लिए एक PHP सर्वर सेट करने के लिए जोड़ना चाहता हूं, आपको बस अपने प्रक्रिया पृष्ठ के शीर्ष पर इस पंक्ति को जोड़ने की आवश्यकता है: