2010-11-11 24 views
123

तो jQuery Ajax docs के अनुसार, यह अनुरोध भेजते समय क्वेरी स्ट्रिंग के रूप में डेटा को क्रमबद्ध करता है, लेकिन processData:false सेटिंग को मुझे शरीर में वास्तविक JSON भेजने की अनुमति देनी चाहिए। दुर्भाग्य से मुझे पहले का निर्धारण करने में कठिनाई हो रही है, अगर यह हो रहा है और दूसरा ऑब्जेक्ट ऐसा लगता है जो सर्वर पर भेजा जा रहा है। मुझे पता है कि सर्वर जो मैं भेज रहा हूं उसे पार्स नहीं कर रहा हूं।अनुरोध शरीर में jQuery पोस्टिंग वैध जेसन

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

जब जावा पक्ष यह सचमुच हो जाता है [object Object] पर शरीर सामग्री प्रवेश करने तो एक वास्तविक JSON डेटा कैसे भेजता है ??

क्या किसी को jQuery से भेजे गए अनुरोध के साथ अनुरोध निकाय में जेएसओएन डेटा क्रमबद्ध करने वाली जावा सेवा के साथ अनुभव हुआ है?

$.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' 
}); 

उत्तर

206

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

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

आप कहाँ एक वास्तविक JSON स्ट्रिंग भेज रहे

BTW यहाँ पूर्ण $ .ajax अनुरोध है। एक अधिक सामान्य समाधान के लिए, JSON करने के लिए एक वस्तु को क्रमानुसार करने, इस तरह JSON.stringify() का उपयोग करें:

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

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


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

+0

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

+4

@brad - सही, यह करने के बाद इससे कोई फर्क नहीं पड़ता क्योंकि यह * पहले से ही एक स्ट्रिंग है, और उस स्थिति में [jQuery इसे आगे संसाधित नहीं करेगा] (https://github.com/jquery/jquery/blob/ 1.4.3/src/ajax.js # L207)। –

+1

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

संबंधित मुद्दे