jQuery अनुरोध शरीर में मान्य json पोस्ट कर रहा है


180

इसलिए jQuery के अजाक्स डॉक्स के अनुसार , यह अनुरोध भेजते समय क्वेरी स्ट्रिंग के रूप में डेटा को क्रमबद्ध करता है, लेकिन सेटिंग से processData:falseमुझे शरीर में वास्तविक JSON भेजने की अनुमति मिल सकती है। दुर्भाग्य से, मुझे पहले से निर्धारित करने में मुश्किल समय आ रहा है, अगर ऐसा हो रहा है और दूसरा जो वस्तु जैसा दिखता है उसे सर्वर पर भेजा जा रहा है। मुझे सिर्फ इतना पता है कि जो मैं भेज रहा हूं वह सर्वर पार्स नहीं कर रहा है।

जब एक वस्तु शाब्दिक पोस्ट करने के लिए http क्लाइंट का उपयोग किया जाता है तो {someKey:'someData'}यह काम करता है। लेकिन jQuery का उपयोग करते समय data: {someKey:'someData'}, यह विफल रहता है। दुर्भाग्य से जब मैं सफ़ारी में अनुरोध का विश्लेषण करता हूं, तो यह कहता है कि संदेश पेलोड है [object Object]... महान ... और फ़ायरफ़ॉक्स में पोस्ट रिक्त है ...

जावा की तरफ से बॉडी कंटेंट को लॉग इन करते समय यह सचमुच में हो जाता है [object Object]तो कोई REAL JSON डेटा कैसे भेजता है ??

क्या किसी के पास jQuery से भेजे गए अनुरोध के साथ JSON डेटा को अनुक्रमित करने वाली जावा सेवा के साथ अनुभव है?

BTW यहाँ पूर्ण $ .ajax अनुरोध है:

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});

जवाबों:


293

एक वास्तविक JSON अनुरोध इस तरह दिखेगा:

data: '{"command":"on"}',

जहाँ आप एक वास्तविक JSON स्ट्रिंग भेज रहे हैं। एक अधिक सामान्य समाधान के लिए, JSON.stringify()इस तरह से JSON के लिए ऑब्जेक्ट को क्रमबद्ध करने के लिए उपयोग करें:

data: JSON.stringify({ "command": "on" }),

पुराने ब्राउज़रों का समर्थन करने के लिए जिनके पास JSONऑब्जेक्ट नहीं है , json2.js का उपयोग करें जो इसे जोड़ देगा।


वर्तमान में क्या हो रहा है जब से आपके पास है processData: false, यह मूल रूप से यह भेज रहा है: ({"command":"on"}).toString()जो है [object Object]... जो आप अपने अनुरोध में देखते हैं।


तो क्या मुझे अब प्रोसेसडेटा की आवश्यकता नहीं है: गलत उपयोग JSON.stringify()?
ब्रैड

6
@ ब्रैड - सही है, यह करने के बाद कोई फर्क नहीं पड़ेगा क्योंकि यह पहले से ही एक स्ट्रिंग है, और उस स्थिति में jQuery इसे आगे संसाधित नहीं करेगा
निक Craver

2
एक आकर्षण की तरह काम किया, बहुत धन्यवाद! क्या यह सच है कि सभी अनुरोध निकायों को दूसरे छोर पर पार्स होने वाले तार होने की उम्मीद है?
ब्रैड

JQuery dataको एक स्ट्रिंग में पार्स क्यों करता है , सिर्फ JSON के रूप में भेजने के विपरीत?
एडम ज़र्नर

साइड नोट: अगर किसी को फॉर्म डेटा के बजाय "बॉडी रिक्वेस्ट पेलोड" के रूप में इसकी आवश्यकता है, तो contentType: "application/json; charset=utf-8",इस धागे में बताए अनुसार शामिल करना न भूलें : stackoverflow.com/questions/21201270/…
raydlevel5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.