दिलचस्प पोस्ट
समानांतर में दो सूचियों के माध्यम से कैसे पुनरावृत्त करें? SQLite में वैरिएबल तालिका का नाम थ्रेड के अंदर हेन्डलर नहीं बना सकते हैं, जो कि Looper.prepare () को ProgressDialog के लिए AsyncTask के अंदर नहीं कहा है IPython में submodules को फिर से लोड करना मुझे एंड्रॉइड अकाउंट मैनेजर का क्या उपयोग करना चाहिए? मैं JFreeChart के आकार को कैसे बदलूं? सीधे मेरी एंड्रॉइड एप्लिकेशन में ZXing लाइब्रेरी को एकीकृत करना आईपैड उपयोगकर्ताओं का पता लगाने के लिए jQuery का उपयोग? मैं कैसे जांचूं अगर कोई स्ट्रिंग में कोई विशिष्ट शब्द होता है? अभिव्यक्ति 0 <0 == 0 वापस क्यों पायथन में गलत है? विवरण विशेषता से एन्यूम प्राप्त करें jQuery – प्रत्येक 10 सेकंड में एजेक्स को कॉल करें सक्रिय विंडो का स्क्रीनशॉट कैप्चर करें? कैसे सरणी = {0} 0 तक पूरी सरणी सेट करता है? यदि ब्लॉक के भीतर गूंज बयान है?

मैं एक अनुरोध पेलोड के बजाय डेटा डेटा के रूप में डेटा कैसे पोस्ट कर सकता हूं?

नीचे दिए गए कोड में, एंजरीज एस एच यू पद्धति यूआरएल को कॉल करती है, और एक्सएसआरएफ ऑब्जेक्ट "अनुरोध पेलोड" के रूप में प्रस्तुत करती है (जैसा कि क्रोम डीबगर नेटवर्क टैब में वर्णित है)। JQuery $.ajax विधि एक ही कॉल करता है, लेकिन "फॉर्म डेटा" के रूप में एक्सएसआरएफ को सबमिट करता है

मैं कैसे AngularJS एक अनुरोध पेलोड के बजाय फार्म डेटा के रूप में xsrf को जमा कर सकता हूँ?

 var url = 'http://somewhere.com/'; var xsrf = {fkey: 'xsrf key'}; $http({ method: 'POST', url: url, data: xsrf }).success(function () {}); $.ajax({ type: 'POST', url: url, data: xsrf, dataType: 'json', success: function() {} }); 

वेब के समाधान से एकत्रित समाधान "मैं एक अनुरोध पेलोड के बजाय डेटा डेटा के रूप में डेटा कैसे पोस्ट कर सकता हूं?"

निम्नलिखित पंक्ति को $ http ऑब्जेक्ट में जोड़ा जाना चाहिए:

 headers: {'Content-Type': 'application/x-www-form-urlencoded'} 

और पास किए गए डेटा को यूआरएल-एन्कोडेड स्ट्रिंग में बदला जाना चाहिए:

 > $.param({fkey: "key"}) 'fkey=key' 

तो आपके पास कुछ ऐसा है:

 $http({ method: 'POST', url: url, data: $.param({fkey: "key"}), headers: {'Content-Type': 'application/x-www-form-urlencoded'} }) 

से: https://groups.google.com/forum/#!msg/angular/5nAedJ1LyO0/4Vj_72EZcDsJ

यदि आप समाधान में jQuery का उपयोग नहीं करना चाहते हैं, तो आप यह कोशिश कर सकते हैं। समाधान यहां से लिया गया https://stackoverflow.com/a/1714899/1784301

 $http({ method: 'POST', url: url, headers: {'Content-Type': 'application/x-www-form-urlencoded'}, transformRequest: function(obj) { var str = []; for(var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); return str.join("&"); }, data: xsrf }).success(function () {}); 

इस मुद्दे के आसपास चल रहे भ्रम ने मुझे इसके बारे में एक ब्लॉग पोस्ट लिखने के लिए प्रेरित किया। इस पोस्ट में आपके द्वारा प्रस्तावित हल आपके वर्तमान टॉप रेटेड समाधान से बेहतर है क्योंकि यह आपको $ http सेवा कॉल के लिए अपने डेटा ऑब्जेक्ट को पैरामीट्रिज करने के लिए प्रतिबंधित नहीं करता है; यानी मेरे समाधान के साथ आप वास्तविक डेटा ऑब्जेक्ट्स को $ http.post () आदि से जारी कर सकते हैं और अभी भी वांछित परिणाम प्राप्त कर सकते हैं।

साथ ही, शीर्ष रेट किए गए उत्तर $ .param () फ़ंक्शन के लिए पृष्ठ में पूर्ण jQuery के शामिल किए जाने पर निर्भर करता है, जबकि मेरा समाधान jQuery के नास्तिक, शुद्ध अंगुलेज तैयार है।

http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/

उम्मीद है की यह मदद करेगा।

मैंने कुछ अन्य जवाब दिए और कुछ क्लीनर बनाये, यह आपके। कोण के अंत में कॉल करें। कॉन्फ़िग .config() कॉल करें.आपके app.js में मॉड्यूल:

 .config(['$httpProvider', function ($httpProvider) { // Intercept POST requests, convert to standard form encoding $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; $httpProvider.defaults.transformRequest.unshift(function (data, headersGetter) { var key, result = []; if (typeof data === "string") return data; for (key in data) { if (data.hasOwnProperty(key)) result.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key])); } return result.join("&"); }); }]); 

AngularJS v1.4.0 के रूप में, $httpParamSerializer सेवा का एक अंतर्निहित है जो डॉक्स पृष्ठ पर सूचीबद्ध नियमों के अनुसार किसी भी ऑब्जेक्ट को HTTP अनुरोध के एक हिस्से में कनवर्ट करता है।

इसका उपयोग इस प्रकार किया जा सकता है:

 $http.post('http://example.com', $httpParamSerializer(formDataObj)). success(function(data){/* response status 200-299 */}). error(function(data){/* response status 400-999 */}); 

एक सही फॉर्म पोस्ट के लिए याद रखें, Content-Type हैडर बदलना होगा। सभी POST अनुरोधों के लिए विश्व स्तर पर ऐसा करने के लिए, यह कोड (अल्बेरियो के आधा उत्तर से लिया गया) का उपयोग किया जा सकता है:

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

यह केवल वर्तमान पद के लिए करने के लिए, अनुरोध ऑब्जेक्ट की headers संपत्ति को संशोधित करने की आवश्यकता है:

 var req = { method: 'POST', url: 'http://example.com', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: $httpParamSerializer(formDataObj) }; $http(req); 

आप विश्व स्तर पर व्यवहार को परिभाषित कर सकते हैं:

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

तो आपको हर बार इसे फिर से परिभाषित करने की आवश्यकता नहीं है:

 $http.post("/handle/post", { foo: "FOO", bar: "BAR" }).success(function (data, status, headers, config) { // TODO }).error(function (data, status, headers, config) { // TODO }); 

एक वैकल्पिक हल के रूप में आप बस कोड को आवेदन प्राप्त करने के लिए आवेदन / जेएसएन डेटा पर जवाब दे सकते हैं। PHP के लिए मुझे नीचे दिए गए कोड को जोड़ दिया गया है, मुझे इसे किसी भी रूप-एन्कोडेड या JSON में पोस्ट करने की इजाजत दी गई है।

 //handles JSON posted arguments and stuffs them into $_POST //angular's $http makes JSON posts (not normal "form encoded") $content_type_args = explode(';', $_SERVER['CONTENT_TYPE']); //parse content_type string if ($content_type_args[0] == 'application/json') $_POST = json_decode(file_get_contents('php://input'),true); //now continue to reference $_POST vars as usual 

ये उत्तर पागल उछाल की तरह दिखते हैं, कभी-कभी, सरल बस बेहतर होता है:

 $http.post(loginUrl, "userName=" + encodeURIComponent(email) + "&password=" + encodeURIComponent(password) + "&grant_type=password" ).success(function (data) { //... 

आप नीचे समाधान के साथ कोशिश कर सकते हैं

 $http({ method: 'POST', url: url-post, data: data-post-object-json, headers: {'Content-Type': 'application/x-www-form-urlencoded'}, transformRequest: function(obj) { var str = []; for (var key in obj) { if (obj[key] instanceof Array) { for(var idx in obj[key]){ var subObj = obj[key][idx]; for(var subKey in subObj){ str.push(encodeURIComponent(key) + "[" + idx + "][" + encodeURIComponent(subKey) + "]=" + encodeURIComponent(subObj[subKey])); } } } else { str.push(encodeURIComponent(key) + "=" + encodeURIComponent(obj[key])); } } return str.join("&"); } }).success(function(response) { /* Do something */ }); 

एक बहुत अच्छा ट्यूटोरियल है जो इस और अन्य संबंधित सामानों पर जाता है – एजेएक्स फ़ॉर्म जमा करना: अंगुलजेएस वे

असल में, आपको यह संकेत देने के लिए POST अनुरोध के हेडर को सेट करने की आवश्यकता है कि आप यूआरएल एन्कोडेड स्ट्रिंग के रूप में फॉर्म डेटा भेज रहे हैं, और डेटा को उसी स्वरूप में भेजा जा सकता है

 $http({ method : 'POST', url : 'url', data : $.param(xsrf), // pass in data as strings headers : { 'Content-Type': 'application/x-www-form-urlencoded' } // set the headers so angular passing info as form data (not request payload) }); 

ध्यान दें कि jQuery के परम () हेल्पर फ़ंक्शन को यहां स्ट्रिंग में डेटा सीरियल करने के लिए उपयोग किया जाता है, लेकिन यदि आप jQuery का उपयोग नहीं करते तो मैन्युअल रूप से यह कर सकते हैं।

 var fd = new FormData(); fd.append('file', file); $http.post(uploadUrl, fd, { transformRequest: angular.identity, headers: {'Content-Type': undefined} }) .success(function(){ }) .error(function(){ }); 

कृपया जांच लें! https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs

पोस्ट के लिए एडेप्टर सेवा बनाएं:

 services.service('Http', function ($http) { var self = this this.post = function (url, data) { return $http({ method: 'POST', url: url, data: $.param(data), headers: {'Content-Type': 'application/x-www-form-urlencoded'} }) } }) 

इसे अपने नियंत्रकों या जो भी उपयोग करें:

 ctrls.controller('PersonCtrl', function (Http /* our service */) { var self = this self.user = {name: "Ozgur", eMail: null} self.register = function () { Http.post('/user/register', self.user).then(function (r) { //response console.log(r) }) } }) 

Symfony2 उपयोगकर्ताओं के लिए:

यदि आप इस काम के लिए अपनी जावास्क्रिप्ट में कुछ भी नहीं बदलना चाहते हैं, तो आप इन संशोधनों को सिम्फनी ऐप में कर सकते हैं:

एक वर्ग बनाएँ जो Symfony \ Component \ HttpFoundation \ Request वर्ग को बढ़ाता है:

 <?php namespace Acme\Test\MyRequest; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\ParameterBag; class MyRequest extends Request{ /** * Override and extend the createFromGlobals function. * * * * @return Request A new request * * @api */ public static function createFromGlobals() { // Get what we would get from the parent $request = parent::createFromGlobals(); // Add the handling for 'application/json' content type. if(0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/json')){ // The json is in the content $cont = $request->getContent(); $json = json_decode($cont); // ParameterBag must be an Array. if(is_object($json)) { $json = (array) $json; } $request->request = new ParameterBag($json); } return $request; } } 

अब आप app_dev.php में वर्ग का उपयोग करें (या आप उपयोग करते हैं कि किसी भी सूचकांक फ़ाइल)

 // web/app_dev.php $kernel = new AppKernel('dev', true); // $kernel->loadClassCache(); $request = ForumBundleRequest::createFromGlobals(); // use your class instead // $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response); 

बस सेट करें सामग्री-प्रकार पर्याप्त नहीं है, भेजने से पहले यूआरएल एन्कोड फॉर्म डेटा $http.post(url, jQuery.param(data))

मैं वर्तमान में निम्नलिखित समाधान का उपयोग कर रहा हूँ जो मुझे अंगुलियस गूगल समूह में मिला है।

 $ http
 .post ('/ echo / json /', 'json =' + encodeurIComponent (angular.toJson (डेटा)), {
     हेडर: {
         'सामग्री-प्रकार': 'आवेदन / एक्स-www-फ़ॉर्म-यूआरएलएक्सोड;  charset = UTF-8 '
     }
 }) सफलता (कार्य (डेटा) {
     $ scope.data = डेटा;
 });

ध्यान दें कि यदि आप PHP का उपयोग कर रहे हैं, तो आपको इसे पढ़ने के लिए Request::createFromGlobals() 2 HTTP घटक के Request::createFromGlobals() जैसे कुछ का उपयोग करना होगा क्योंकि $ _POST स्वचालित रूप से इसके साथ लोड नहीं होगा।

AngularJS इसे ठीक से कर रहा है क्योंकि http- अनुरोध हैडर के अंदर निम्न सामग्री-प्रकार कर रहा है:

 Content-Type: application/json 

यदि आप मेरे जैसे php के साथ जा रहे हैं, या यहां तक ​​कि Symfony2 के साथ भी आप बस यहां वर्णित जेएसएसएन मानक के लिए अपने सर्वर संगतता का विस्तार कर सकते हैं: http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

Symfony2 तरीका (जैसे आपके DefaultController के अंदर):

 $request = $this->getRequest(); if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) { $data = json_decode($request->getContent(), true); $request->request->replace(is_array($data) ? $data : array()); } var_dump($request->request->all()); 

लाभ होगा, आप jQuery के param का उपयोग करने की आवश्यकता नहीं है और आप AngularJS ऐसे अनुरोध करने का अपना मूल तरीका इस्तेमाल कर सकते हैं।

पूरा जवाब (कोणीय से 1.4)। आपको निर्भरता $ httpParamSerializer को शामिल करने की आवश्यकता है

 var res = $resource(serverUrl + 'Token', { }, { save: { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } }); res.save({ }, $httpParamSerializer({ param1: 'sdsd', param2: 'sdsd' }), function (response) { }, function (error) { }); 

आपके ऐप कॉन्फ़िग में –

 $httpProvider.defaults.transformRequest = function (data) { if (data === undefined) return data; var clonedData = $.extend(true, {}, data); for (var property in clonedData) if (property.substr(0, 1) == '$') delete clonedData[property]; return $.param(clonedData); }; 

आपके संसाधन अनुरोध के साथ –

  headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 

यह एक सीधा जवाब नहीं है, बल्कि एक अलग डिजाइन दिशा है:

एक फॉर्म के रूप में डेटा पोस्ट न करें, लेकिन एक JSON ऑब्जेक्ट के रूप में सर्वर-साइड ऑब्जेक्ट पर सीधे मैप किए जाने या REST शैली पथ वैरिएबल का उपयोग करें

अब मुझे पता है कि आपके मामले में कोई भी विकल्प उपयुक्त नहीं हो सकता है क्योंकि आप एक XSRF कुंजी पास करने की कोशिश कर रहे हैं इसे इस तरह एक पथ चर में मैप करना एक भयानक डिजाइन है:

 http://www.someexample.com/xsrf/{xsrfKey} 

क्योंकि प्रकृति से आप अन्य मार्गों के लिए एक्सएसआरएफ कुंजी भी, /login , /book-appointment आदि से गुजरना चाहते हैं और आप अपने सुंदर URL को गड़बड़ नहीं करना चाहते हैं

दिलचस्प बात यह है कि एक ऑब्जेक्ट फ़ील्ड के रूप में इसे भी उपयुक्त नहीं है, क्योंकि अब प्रत्येक जेसन ऑब्जेक्ट पर आप सर्वर से गुजरते हैं, आपको फील्ड जोड़ना पड़ता है

 { appointmentId : 23, name : 'Joe Citizen', xsrf : '...' } 

आप निश्चित रूप से अपने सर्वर-साइड क्लास पर एक और फ़ील्ड नहीं जोड़ना चाहते हैं, जिसमें डोमेन ऑब्जेक्ट के साथ कोई सीधा अर्थ सहयोग नहीं होता है।

मेरी राय में अपने xsrf कुंजी को पास करने का सबसे अच्छा तरीका HTTP हैडर के जरिए है। कई एक्सएसआरएफ सुरक्षा सर्वर-साइड वेब फ़्रेमवर्क लाइब्रेरी इस का समर्थन करते हैं। उदाहरण के लिए जावा स्प्रिंग में, आप इसे X-CSRF-TOKEN हेडर का उपयोग कर पास कर सकते हैं ।

कोणीय की यूआई ऑब्जेक्ट को बाध्यकारी जेएस ऑब्जेक्ट की उत्कृष्ट क्षमता का अर्थ है कि हम सभी को एक साथ पोस्टिंग पोस्टिंग के अभ्यास से छुटकारा पा सकते हैं और इसके बदले JSON को पोस्ट कर सकते हैं। JSON सर्वर-साइड ऑब्जेक्ट में आसानी से डी-सीरियल कर सकते हैं और मैप, एरेज़, नेस्टेड ऑब्जेक्ट इत्यादि जैसे जटिल डेटा संरचनाओं का समर्थन कर सकते हैं।

आप फॉर्म पेलोड में सरणी कैसे पोस्ट करते हैं? शायद इस तरह से:

 shopLocation=downtown&daysOpen=Monday&daysOpen=Tuesday&daysOpen=Wednesday 

या यह:

 shopLocation=downtwon&daysOpen=Monday,Tuesday,Wednesday 

दोनों खराब डिज़ाइन हैं ..

आप को बदलने के लिए केवल पतली है, जब आप अपनी $ http ऑब्जेक्ट बनाते हैं तो "डेटा" के बजाय गुण "पैरामीटर" का उपयोग करना है:

 $http({ method: 'POST', url: serviceUrl + '/ClientUpdate', params: { LangUserId: userId, clientJSON: clients[i] }, }) 

क्लाइंट के ऊपर दिए गए उदाहरण में [i] केवल JSON ऑब्जेक्ट है (किसी भी तरह से सीरियलकृत नहीं किया गया है) यदि आप "डेटा" ऐन्टेबल के बजाय "पैरामीटर" का उपयोग करते हैं तो आप $ httpParamSerializer का उपयोग करके वस्तु को सीरियल कर सकते हैं: https://docs.angularjs.org/api/ng/service/ $ httpParamSerializer

AngularJS $http सेवा का उपयोग करें और अपनी post विधि का उपयोग करें या $http फ़ंक्शन को कॉन्फ़िगर करें।