दिलचस्प पोस्ट
XSD स्कीमा का उपयोग करते हुए एक्सएमएल सत्यापन थ्रेड सेफ़ सिंगलटन क्लास Mysql चुनिंदा क्वेरी में दो तिथियों के बीच दिनांक की सूची कैसे प्राप्त करें PHP सूची निर्देशिका में सभी फाइलें एमआईपीएस लिंक सूची जावास्क्रिप्ट में जेएसटीएल वैरिएबल वैल्यू कैसे सेट करें? डायरेक्टरी के लिए जांच और .NET में फाइल लिखने की अनुमति मैं पता से अक्षांश और देशांतर कैसे पा सकता हूं? "डिकोडर जेपीईजी उपलब्ध नहीं" संदेश के साथ पायथन इमेज लाइब्रेरी विफल – जनहित याचिका एक सूचक को एक स्वत: चर में लौटाना कैसे सीपीयू कोर की संख्या के माध्यम से पता .net / सी #? पायथन में दो दशमलव स्थानों के साथ एक फ्लोट प्रदर्शित करें मैं ASP.NET प्रपत्र पर एक चेकबॉक्स कैसे बना सकता हूं? उपयोग डेटाबेस में डाटा डालने के मापदंडों का उपयोग कर jQuery.ajax विफल रहता है जब यूआरएल अलग सर्वर से है

प्राप्त करें: पोस्ट json डेटा

मैं फ़ेच का उपयोग करते हुए एक JSON ऑब्जेक्ट पोस्ट करने की कोशिश कर रहा हूं

मैं जो समझ सकता हूँ, मुझे अनुरोध के शरीर को एक तंग ऑब्जेक्ट संलग्न करना होगा, उदाहरण के लिए:

fetch("/echo/json/", { headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, method: "POST", body: JSON.stringify({a: 1, b: 2}) }) .then(function(res){ console.log(res) }) .catch(function(res){ console.log(res) }) 

Jsfiddle json गूंज का उपयोग करते समय मैं वापस भेजा वस्तु ( {a: 1, b: 2} ) को देखने की उम्मीद करता था, लेकिन ऐसा नहीं होता – क्रोम devtools अनुरोध के भाग के रूप में JSON भी नहीं दिखाता , जिसका अर्थ है कि यह भेजा नहीं जा रहा है

वेब के समाधान से एकत्रित समाधान "प्राप्त करें: पोस्ट json डेटा"

क्रोम devtools भी अनुरोध के भाग के रूप में JSON नहीं दिखाता है

यह यहां असली मुद्दा है , और यह Chrome क्रोम 46 में फिक्स्ड क्रोम डेवलट्स के साथ एक बग है ।

यह कोड ठीक काम करता है – यह सही ढंग से JSON को पोस्ट कर रहा है, यह अभी नहीं देखा जा सकता है।

मैं उस वस्तु को देखने की अपेक्षा करता हूं जिसे मैंने वापस भेजा है

यह काम नहीं कर रहा है क्योंकि यह जेएसएफडल की गूंज के लिए सही प्रारूप नहीं है।

सही कोड है:

 var payload = { a: 1, b: 2 }; var data = new FormData(); data.append( "json", JSON.stringify( payload ) ); fetch("/echo/json/", { method: "POST", body: data }) .then(function(res){ return res.json(); }) .then(function(data){ alert( JSON.stringify( data ) ) }) 

JSON पेलोड को स्वीकार करने वाले अंतिम बिंदुओं के लिए, मूल कोड सही है

मुझे लगता है कि आपका मुद्दा form-urlencoded अनुरोध केवल प्रोसेस कर सकता है

लेकिन json अनुरोध करने का सही तरीका एक शरीर के रूप में सही json है:

 fetch('https://httpbin.org/post', { method: 'post', headers: { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json' }, body: JSON.stringify({a: 7, str: 'Some string: &=&'}) }).then(res=>res.json()) .then(res => console.log(res)); 

कुछ समय व्यतीत करने के बाद, रिवर्स इंजीनियरिंग जेएसफ़िल्ड, पेलोड उत्पन्न करने की कोशिश कर रहा है – एक प्रभाव है।

कृपया लाइन return response.json(); पर नजर (देखभाल return response.json(); जहां प्रतिक्रिया कोई प्रतिक्रिया नहीं है – यह वादा है।

 var json = { json: JSON.stringify({ a: 1, b: 2 }), delay: 3 }; fetch('/echo/json/', { method: 'post', headers: { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json' }, body: 'json=' + encodeURIComponent(JSON.stringify(json.json)) + '&delay=' + json.delay }) .then(function (response) { return response.json(); }) .then(function (result) { alert(result); }) .catch (function (error) { console.log('Request failed', error); }); 

jsFiddle: http://jsfiddle.net/egxt6cpz/46/ और फ़ायरफ़ॉक्स> 39 && क्रोम> 42

खोज इंजन से, मैं गैर-जेसन पोस्टिंग डेटा के साथ लाने के लिए इस विषय पर समाप्त हुआ, इसलिए मैंने सोचा कि यह जोड़ना होगा।

गैर- json के लिए आपको फॉर्म डेटा का उपयोग नहीं करना पड़ता है आप बस Content-Type शीर्ष लेख को application/x-www-form-urlencoded सेट कर सकते हैं और एक स्ट्रिंग का उपयोग कर सकते हैं:

 fetch('url here', { method: 'POST', headers: {'Content-Type':'application/x-www-form-urlencoded'}, // this line is important, if this content-type is not set it wont work body: 'foo=bar&blah=1' }); 

उस body स्ट्रिंग को बनाने का एक वैकल्पिक तरीका है, इसके बजाए इसके ऊपर लिखकर इसे टाइप करना, पुस्तकालयों का उपयोग करना है उदाहरण के लिए query-string या qs पैकेज से stringify फ़ंक्शन। तो इसका उपयोग करके यह ऐसा दिखेगा:

 import queryString from 'query-string'; fetch('url here', { method: 'POST', headers: {'Content-Type':'application/x-www-form-urlencoded'}, // this line is important, if this content-type is not set it wont work body: queryString.stringify({for:'bar', blah:1} }); 

मैंने कई सुधारों के साथ लाने के लिए एक पतली आवरण बनाया है (यदि आप विशुद्ध रूप से JSON REST API का उपयोग कर रहे हैं):

 // Small library to improve on fetch() usage const api = function(method, url, data, headers = {}){ return fetch(url, { method: method.toUpperCase(), body: JSON.stringify(data), // send it as stringified json credentials: api.credentials, // to keep the session on the request headers: Object.assign(api.headers, headers) // extend the headers }).then(res => res.ok ? res.json() : Promise.reject(res)); }; // Defaults that can be globally overwritten api.credentials = 'include'; api.headers = { 'csrf-token': window.csrf || '', // only if globally set, otherwise ignored 'Accept': 'application/json', // receive json 'Content-Type': 'application/json' // send json }; // Convenient methods ['get', 'post', 'put', 'delete'].forEach(method => { api[method] = api.bind(null, method); }); 

इसका इस्तेमाल करने के लिए आपके पास चर api और 4 तरीके हैं:

 api.get('/todo').then(all => { /* ... */ }); 

और एक async फ़ंक्शन के भीतर:

 const all = await api.get('/todo'); // ... 

JQuery के साथ उदाहरण:

 $('.like').on('click', async e => { const id = 123; // Get it however it is better suited await api.put(`/like/${id}`, { like: true }); // Whatever: $(e.target).addClass('active dislike').removeClass('like'); }); 

एक ही मुद्दा था – कोई भी क्लाइंट से सर्वर पर कोई भी body नहीं भेजा गया था

Content-Type हैडर जोड़कर मेरे लिए यह हल:

 var headers = new Headers(); headers.append('Accept', 'application/json'); // This one is enough for GET requests headers.append('Content-Type', 'application/json'); // This one sends body return fetch('/some/endpoint', { method: 'POST', mode: 'same-origin', credentials: 'include', redirect: 'follow', headers: headers, body: JSON.stringify({ name: 'John', surname: 'Doe' }), }).then(resp => { ... }).catch(err => { ... }) 

यह Content-Type से संबंधित है जैसा कि आप इस प्रश्न के अन्य चर्चाओं और उत्तरों से देख सकते हैं, कुछ लोग Content-Type: 'application/json' सेट करके इसे हल कर पाए थे। दुर्भाग्य से मेरे मामले में यह काम नहीं कर रहा था, मेरे पोस्ट अनुरोध अभी भी सर्वर साइड पर खाली था।

हालांकि, अगर आप jQuery के $.post() के साथ प्रयास करते हैं और यह काम कर रहा है, तो संभव है कि jQuery का उपयोग करके Content-Type: 'x-www-form-urlencoded' बजाय application/json

 data = Object.keys(data).map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key])).join('&') fetch('/api/', { method: 'post', credentials: "include", body: data, headers: {'Content-Type': 'application/x-www-form-urlencoded'} })