2012-06-19 11 views
36

के साथ ऑब्जेक्ट्स की एक सरणी कैसे पोस्ट करूं I Zepto या Jquery में $ .ajax के साथ ऑब्जेक्ट्स की एक सरणी पोस्ट करना चाहता हूं। दोनों एक ही अजीब त्रुटि प्रदर्शित करते हैं, लेकिन मुझे वह नहीं मिल रहा है जो मैं गलत कर रहा हूं।

डेटा 'रीस्टेसी' जैसे परीक्षण क्लाइंट का उपयोग करते समय सर्वर पर सहेजा जाता है, और मैं ब्राउजर के नेट पैनल में उलझने का अनुरोध देख सकता हूं, इसलिए मेरा मानना ​​है कि जेएस अपराधी है।

यदि मैं पोस्ट की डेटा प्रॉपर्टी के रूप में ऑब्जेक्ट्स की एक सरणी भेजता हूं, तो उन्हें ठीक से नहीं भेजा जाता है।

डाटा वस्तु:

var postData = [ 
    { "id":"1", "name":"bob"} 
    , { "id":"2", "name":"jonas"} 
    ] 

अनुरोध:

$.ajax({ 
    url: _saveDeviceUrl 
, type: 'POST' 
, contentType: 'application/json' 
, dataType: 'json' 
, data: postData 
, success: _madeSave.bind(this) 
//, processData: false //Doesn't help 
}); 

अनुरोध शरीर ब्राउज़र के रूप में देखा:

"bob=undefined&jonas=undefined" 

यह $ परम का उपयोग करके अधिक सीधे देखा जा सकता है विधि जो jQuery और Zepto दोनों पोस्ट डेटा तैयार करने के लिए उपयोग करते हैं।

$.param(
    [ 
    { "id":"1", "name":"bob"} 
    , { "id":"2", "name":"jonas"} 
    ] 
) 
// Output: "bob=undefined&jonas=undefined" 

तो यह तैयारी है कि इन पुस्तकालयों जटिल पद डेटा के लिए अलग है की तुलना में मैं उम्मीद कर की तरह लगता है।

मुझे यह उत्तर दिखाई देता है, लेकिन मैं डेटा को क्वेरी पैरा के रूप में नहीं भेजना चाहता क्योंकि मैं बहुत सारी सामग्री पोस्ट कर रहा हूं। How do I send an array in an .ajax post using jQuery?

jQuery/Zepto का उपयोग कर पोस्ट पर एकाधिक ऑब्जेक्ट भेजने का सही तरीका क्या है?

$ .ajax ({... डेटा: JSON.stringify (postData) ...} का उपयोग करके) गैर-उलझन वाली सामग्री भेजता है, लेकिन सर्वर प्रारूप को पसंद नहीं करता है।

अद्यतन: लगता JSON.stringify भेजता है सही ढंग से स्वरूपित सामग्री की तरह। मुद्दा यह है कि सर्वर की तरफ ऑब्जेक्ट की संरचना के बारे में बहुत विशिष्ट है, जो वह चाहता है। यदि मैं ऑब्जेक्ट से किसी भी गुण को जोड़ता या हटाता हूं, तो यह मिलान करने वाली गुणों का उपयोग करने की बजाय पूरी प्रक्रिया में विफल हो जाएगा। यह असुविधाजनक है क्योंकि सर्वर-प्रेषित सामग्री को एक दृश्य मॉडल के रूप में उपयोग करना अच्छा होता है, लेकिन मॉडल को बदलना देखें। ... अभी भी सर्वोत्तम समाधान पर काम कर रहा है।

+0

क्या आप PHP का उपयोग कर यह डेटा प्राप्त कर रहे हैं? यदि हां, तो आप [.serialize()] (http://api.jquery.com/serialize/) का उपयोग करने का प्रयास कर सकते हैं, लेकिन आपको चर नामों के अंत में '[] 'जोड़ने की आवश्यकता होगी और उन्हें सरणी –

उत्तर

70

भेजने से पहले stringify करना सुनिश्चित करें। मैं पुस्तकालयों पर बहुत ज्यादा झुका हुआ था और सोचा था कि वे सामग्री के आधार पर ठीक से एन्कोड करेंगे, टाइप करें, लेकिन वे ऐसा नहीं लग रहे हैं।

काम करता है:

$.ajax({ 
    url: _saveAllDevicesUrl 
, type: 'POST' 
, contentType: 'application/json' 
, data: JSON.stringify(postData) //stringify is important 
, success: _madeSave.bind(this) 
}); 

मैं $ .toJSON की तरह एक प्लगइन का उपयोग कर के लिए इस विधि पसंद करते हैं, कि हालांकि इसी कार्य को पूरा करता है।

+0

हे वहाँ, बस एक त्वरित एक। मैंने कुछ '+ =' कथन के माध्यम से यूआरएल प्रारूप में स्ट्रिंग के रूप में एक पैरामीटर सूची बनाई है, उदा। 'x = 123 और y = 1234 और z = 12345' ... अब यह ईमानदार होने के लिए काफी लंबा है ... बहुत लंबा। मुझे यूआरएल भी पता है, तो क्या मैं सैद्धांतिक रूप से केवल 'डेटा: myParamString' कर सकता हूं, या क्या मुझे JSON की आवश्यकता है। इसे भी समझाएं? धन्यवाद, मुझे पता है कि यह एक पुराना प्रश्न – shanehoban

+1

एक पोस्ट में @shanehoban है, पैरामीटर आम तौर पर शरीर में भेजे जाते हैं, यूआरएल पैराम के रूप में नहीं। क्या आप एक जीईटी कर रहे हैं? किसी भी मामले में, मुझे नहीं लगता कि यह बहुत संबंधित है। शायद एक अलग सवाल खोलना चाहते हैं। – SimplGy

+0

धन्यवाद, अब मैं समझता हूं - यह थोड़ी देर पहले था :) @ सिंपल हालांकि बहुत सराहना की! – shanehoban

4

संपादित करें: मुझे लगता है कि यह अब देशी JSON.stringify() विधि, most browsers द्वारा समर्थित (हाँ, यहाँ तक कि IE8 + आप सोच रहे हैं कि) उपयोग के लिए सुरक्षित होने के लिए शुरू कर रहा है।

के रूप में सरल रूप में:

JSON.stringify(yourData) 

आप आप इसे भेजने से पहले JSON में डेटा सांकेतिक शब्दों में बदलना चाहिए, तो आप न सिर्फ एक वस्तु इस तरह पोस्ट डेटा के रूप में भेज सकते हैं।

मैं ऐसा करने के लिए jQuery json plugin का उपयोग करने की अनुशंसा करता हूं।इसके बाद आप jQuery में कुछ इस तरह उपयोग कर सकते हैं:

$.post(_saveDeviceUrl, { 
    data : $.toJSON(postData) 
}, function(response){ 
    //Process your response here 
} 
); 
+1

यह पहले से ही एक जावास्क्रिप्ट ऑब्जेक्ट है, मैंने सोचा कि रूपांतरण छोटा था या इन पुस्तकालयों द्वारा स्वचालित रूप से संभाला गया था। यह वास्तव में जेएस ऑब्जेक्ट और जेएसओएन स्थानांतरण ऑब्जेक्ट के बीच क्या रूपांतरण कर रहा है? क्या यह JSON.stringify जैसा ही है? – SimplGy

11

निम्नलिखित का प्रयास करें:

$.ajax({ 
    url: _saveDeviceUrl 
, type: 'POST' 
, contentType: 'application/json' 
, dataType: 'json' 
, data: {'myArray': postData} 
, success: _madeSave.bind(this) 
//, processData: false //Doesn't help 
}); 
+0

यह एक बेहतर तरीका है क्योंकि जावास्क्रिप्ट में एक ऐरे स्वयं ही एक JSON नहीं है। यहां तक ​​कि {[]} मान्य नहीं है। सरणी को किसी वस्तु द्वारा और किसी संपत्ति के अंदर लपेटने की आवश्यकता होती है। –

+1

धन्यवाद, सबसे अच्छा समाधान तुम्हारा है। इससे मुझे अपने वेब एएसपीनेट एपीआई पर AJAX के साथ ऑब्जेक्ट की एक सरणी भेजने में मदद मिली है। –