दिलचस्प पोस्ट
बेस 64 को डीकोड करने के लिए जावास्क्रिप्ट एटोब का इस्तेमाल करना यूटीएफ -8 तारों को ठीक से व्याख्या नहीं करता है XCode 3.2.3 w / iPhone SDK 4 स्थापित करें, "बेस एसडीके लापता" प्राप्त करें, अन्य एसडीके नहीं देख सकते हैं मार्कर के साथ एंड्रॉइड में मैप प्रदर्शित कैसे करें PHP शीर्षलेख () पोस्ट चर के साथ रीडायरेक्ट एक समय सीमा के भीतर 5 मिनट के अंतराल में समूह बनाना आईएसएसएल – ओरेकल के सैकड़ों के समान एक तंत्र बनाना कमांड प्रॉम्प्ट कैसे खोलें और जावा का उपयोग करके कमांड डालें? जावा: यदि ए का विस्तार बी और बी ऑब्जेक्ट फैलता है, तो यह एकाधिक विरासत है क्या JSON कुंजियों को अनूठा होना चाहिए? मैं एडीबी (एंड्रॉइड प्लेटफ़ॉर्म-टूल्स) का उपयोग कर एक दूरस्थ चलने वाले डिवाइस पर कैसे आवेदन कर सकता / निष्पादित कर सकता हूं? JPA / Hibernate में फ्लश () का सही उपयोग जुड़ने का उपयोग करते समय तीव्रता का समय बढ़ाता है कांगारु 2.0 के साथ काम करने वाले मोज़ेक 2.0 सामग्री एमडीडीआईअलोग का उदाहरण सीएसएस के अंदर PHP कैसे चलाऊँ? एक एएसपी.नेट एमवीसी एप में संस्कृति सेट करें

AngularJS – $ http.post के लिए किसी भी तरह से JSON के बजाय अनुरोध मापदंड भेजने के लिए?

मेरे पास कुछ पुराने कोड है जो jQuery के पोस्ट विधि के माध्यम से एक AJAX POST अनुरोध कर रहा है और ऐसा कुछ दिखता है:

$.post("/foo/bar", requestData, function(responseData) { //do stuff with response } 

requestData कुछ बुनियादी स्ट्रिंग संपत्तियों के साथ सिर्फ एक जावास्क्रिप्ट वस्तु है।

मैं अपने सामान को कोनेरी का उपयोग करने के लिए आगे बढ़ने की प्रक्रिया में हूं, और मैं इस कॉल को $ http.post के साथ बदलना चाहता हूं। मैं निम्नलिखित के साथ आया था:

 $http.post("/foo/bar", requestData).success( function(responseData) { //do stuff with response } }); 

जब मैंने ऐसा किया, मुझे सर्वर से 500 त्रुटि प्रतिक्रिया मिली। फायरबग का उपयोग करते हुए मैंने पाया कि इसने अनुरोध शरीर को इस तरह भेजा:

 {"param1":"value1","param2":"value2","param3":"value3"} 

सफल jQuery $.post इस तरह शरीर भेजता है:

 param1=value1&param2=value2&param3=value3 

मैं मार रहा हूँ समापन बिंदु अनुरोध पैरामीटर की उम्मीद है और JSON नहीं है। तो, मेरा सवाल है कि $http.post को JSON के बजाय अनुरोध पैरामीटर के रूप में जावास्क्रिप्ट ऑब्जेक्ट को भेजने के लिए क्या कोई वैसे ही है? हां, मुझे पता है कि मैं खुद को वस्तु से स्ट्रिंग का निर्माण कर सकता हूं, लेकिन मुझे यह जानना चाहिए कि अंगूठे बॉक्स के बाहर के लिए कुछ भी प्रदान करता है।

वेब के समाधान से एकत्रित समाधान "AngularJS – $ http.post के लिए किसी भी तरह से JSON के बजाय अनुरोध मापदंड भेजने के लिए?"

मुझे लगता है कि params कॉन्फ़िगर पैरामीटर यहां काम नहीं करेगा क्योंकि यह शरीर के बजाय यूआरएल को स्ट्रिंग जोड़ता है, लेकिन जो इन्फ़ेलिग्ज का सुझाव दिया गया है उसे जोड़ने के लिए यह एक डिफ़ॉल्ट ट्रांस्फ़ॉर्म के वैश्विक ओवरराइड का एक उदाहरण है (jQuery पैरा का उपयोग उदाहरण के रूप में पैरामीम स्ट्रिंग के लिए डेटा कन्वर्ट)

वैश्विक परिवर्तन सेट अप फ़ंक्शन सेट करें:

 var app = angular.module('myApp'); app.config(function ($httpProvider) { $httpProvider.defaults.transformRequest = function(data){ if (data === undefined) { return data; } return $.param(data); } }); 

इस तरह से $ http.post के लिए सभी कॉल्स स्वचालित रूप से शरीर को उसी पैरामीटर स्वरूप में रूपांतरित कर देंगे जो jQuery $.post । Post कॉल द्वारा उपयोग किया जाता है।

ध्यान दें कि आप कंटेंट-टाइप हेडर प्रति कॉल या विश्व स्तर पर इस तरह से सेट करना चाह सकते हैं:

 $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; 

नमूना गैर-वैश्विक परिवर्तनप्रति कॉल प्रति कॉल:

  var transform = function(data){ return $.param(data); } $http.post("/foo/bar", requestData, { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, transformRequest: transform }).success(function(responseData) { //do stuff with response }); 

अगर कोणीय> = 1.4 का उपयोग कर रहा है, तो यहां मैंने जो साफ समाधान पाया है वह किसी भी कस्टम या बाहरी पर भरोसा नहीं करता है:

 angular.module('yourModule') .config(function ($httpProvider, $httpParamSerializerJQLikeProvider){ $httpProvider.defaults.transformRequest.unshift($httpParamSerializerJQLikeProvider.$get()); $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'; }); 

और फिर आप इसे अपने ऐप में कहीं भी कर सकते हैं:

 $http({ method: 'POST', url: '/requesturl', data: { param1: 'value1', param2: 'value2' } }); 

और यह सही रूप से डेटा को param1=value1&param2=value2 रूप में param1=value1&param2=value2 कर देगा और इसे /requesturl को application/x-www-form-urlencoded; charset=utf-8 साथ भेज दिया जाएगा application/x-www-form-urlencoded; charset=utf-8 application/x-www-form-urlencoded; charset=utf-8 सामग्री-प्रकार हैडर के रूप में सामान्य रूप से ओवरपॉइंट पर POST अनुरोधों के साथ अपेक्षा की जाती है।

AngularJS प्रलेखन से:

पैराम्स – {ऑब्जेक्ट।} – स्ट्रिंग्स या ऑब्जेक्ट्स का मानचित्र जो कि यूआरएल के बाद? key1 = value1 और key2 = value2 में बदल जाएगा। यदि मान स्ट्रिंग नहीं है , तो यह JSONified होगा

तो, मापदंडों के रूप में स्ट्रिंग प्रदान करें यदि आप यह नहीं चाहते हैं, तो परिवर्तनों का उपयोग करें। दोबारा, दस्तावेज़ीकरण से:

स्थानीय रूप से इन परिवर्तनों को ओवरराइड करने के लिए, ट्रांसफ़ॉर्म फ़ंक्शन को रूपान्तरण रूप में परिभाषित करें और / या रूपांतरण ऑब्जेक्ट के ट्रांसफ़ॉर्मेशन गुणों को परिवर्तित करें। विश्व स्तर पर डिफ़ॉल्ट रूपांतरण को ओवरराइड करने के लिए, $ httpProvider.defaults.transformRequest और $ httpProvider.defaults.transformResponse $ $ httpProvider के गुणों को ओवरराइड करें।

अधिक जानकारी के लिए दस्तावेज़ीकरण देखें।

$.param डेटा में JSON डेटा को सीरियल करने के लिए jQuery का $.param फ़ंक्शन का उपयोग करें।

संक्षेप में, आपके जैसे समान कोड का उपयोग करना:

 $http.post("/foo/bar", $.param(requestData), { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } } ).success( function(responseData) { //do stuff with response } }); 

इसका उपयोग करने के लिए, आपको AngularJS के साथ अपने पृष्ठ में jQuery को शामिल करना होगा।

ध्यान दें कि एग्जिकर 1.4 के रूप में, आप jQuery का उपयोग किए बिना फॉर्म डेटा को सीरियल कर सकते हैं।

App.js में:

 module.run(function($http, $httpParamSerializerJQLike) { $http.defaults.transformRequest.unshift($httpParamSerializerJQLike); }); 

फिर अपने नियंत्रक में:

 $http({ method: 'POST', url: myUrl', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, data: myData }); 

यह एक हैक का थोड़ा सा हो सकता है, लेकिन मैं इस मुद्दे से बचा था और सर्वर के पक्ष में जेएसएसएन को PHP के POST सरणी में बदल दिया था:

 $_POST = json_decode(file_get_contents('php://input'), true); 

कस्टम HTTP प्रमाणीकरण सेट करने के साथ-साथ मेरे पास समस्याएं भी हैं क्योंकि $ संसाधन कैश अनुरोध है

इसे करने के लिए आपको यह करने से मौजूदा हेडर को अधिलेखित करना होगा

 var transformRequest = function(data, headersGetter){ var headers = headersGetter(); headers['Authorization'] = 'WSSE profile="UsernameToken"'; headers['X-WSSE'] = 'UsernameToken ' + nonce headers['Content-Type'] = 'application/json'; }; return $resource( url, { }, { query: { method: 'POST', url: apiURL + '/profile', transformRequest: transformRequest, params: {userId: '@userId'} }, } ); 

मुझे आशा है कि मैं किसी की मदद करने में सक्षम था मुझे यह पता लगाने में 3 दिन लग गए।

डिफ़ॉल्ट हेडर संशोधित करें:

 $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8"; 

फिर JQuery का उपयोग करें $.param विधि:

 var payload = $.param({key: value}); $http.post(targetURL, payload); 
  .controller('pieChartController', ['$scope', '$http', '$httpParamSerializerJQLike', function($scope, $http, $httpParamSerializerJQLike) { var data = { TimeStamp : "2016-04-25 12:50:00" }; $http({ method: 'POST', url: 'serverutilizationreport', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, data: $httpParamSerializerJQLike(data), }).success(function () {}); } ]); 

त्वरित समायोजन – आपमें से उन लोगों के लिए, जो कि ट्रांसफॉर्मर्यूक्वैस्ट फ़ंक्शन के वैश्विक कॉन्फ़िगरेशन में परेशानी का सामना कर रहे हैं, यहां से मैं स्नैपेट का उपयोग कर रहा हूं जो कि Cannot read property 'jquery' of undefined त्रुटि Cannot read property 'jquery' of undefined :

 $httpProvider.defaults.transformRequest = function(data) { return data != undefined ? $.param(data) : null; } 

आप $http.post कॉल में हेडर को बदलकर सर्वर में कोड बदलते ही इस समस्या को हल कर सकते हैं और नियमित रूप से $_POST का उपयोग कर सकते हैं। यहां बताया गया: http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/

मुझे इस पूरे के कई बार समस्याग्रस्त व्यवहार मिला। मैं इसे अभिव्यक्त (टाइपिंग के बिना) और बॉडी पार्सर (डीटी ~ बॉडी-पार्सर टाइपिंग के साथ) से उपयोग किया था।

इसके बजाय मैं एक पोस्ट स्ट्रिंग में जेएसओएन की व्याख्या करने के बजाय एक फाइल अपलोड करने की कोशिश नहीं की।

request.body । बस एक खाली जेसन ( {} ) था।

कई जांच के बाद आखिरकार यह मेरे लिए काम किया:

 import { json } from 'body-parser'; ... app.use(json()); <-- should be defined before the first POST handler! 

क्लाइंट की ओर से अनुरोध स्ट्रिंग में application/json सामग्री प्रकार देने के लिए भी महत्वपूर्ण हो सकता है।