2013-08-03 7 views
5

तो मैं इस कोड है:ajax पोस्ट वस्तु का हिस्सा नहीं भेज

var ajaxUrl = 'a/7776/as'; 
var data = { 
    'answer' : { 'user_input' : [] }, 
    'form_build_id' : 'form-ffe6f10e9601470ed4cfe38257a959a6' 
} 
$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: data, 
    success: function(json){ 
    } 
    }); 

जब मैं पोस्ट स्रोत ऐसा लगता है कि 'जवाब' नहीं भेजा जा रहा है का निरीक्षण किया लेकिन ..

यहाँ पोस्ट स्रोत है Firebug में:

Parametersapplication/x-www-form-urlencoded 
form_build_id form-ffe6f10e9601470ed4cfe38257a959a6 
Source 
form_build_id=form-ffe6f10e9601470ed4cfe38257a959a6 

क्यों यह मामला है और मैं यह भी AJAX पोस्ट में वस्तु का 'जवाब' भाग भेजने के लिए कैसे मिल सकता है?

उत्तर

0

टीजे से अच्छी व्याख्या। पाउडर, स्पष्ट रूप से जानकार। व्यावहारिक उत्तर पर मेरा लेना यहां है। मैंने अपने HTTP ट्रैफिक का निरीक्षण किया और आपके ऊपर AJAX अनुरोध चलाया। जैसा कि अपेक्षित था, answer नहीं भेजा जा रहा था। अगर आप Google पर "अजाक्स खाली सरणी नहीं भेज रहे हैं" की खोज करते हैं, तो आप एड्रेनालिन के उत्तर के साथ भी जा रहे हैं, आप केवल संबंधित परिणामों की संख्या से देख सकते हैं कि यह भी एक मुद्दा है। मैं क्या करूँगा अगर user_input एक खाली सरणी है, तो इसके बजाय null भेजें।मैंने इसे सुनिश्चित करने के लिए खुद को कोशिश की और, जैसा कि अपेक्षित था, इस बार मैंने पैरामीटर को user_input के साथ अनुरोध में भेजा जा रहा था जिसे नीचे दिए गए कोड के साथ शून्य के रूप में भेजा गया था।

var userInput = []; //not sure where this is coming from in reality, but this is just an example. 

if (userInput.length == 0){ //in this example, this is obviously always true 
    userInput = null; 
} 
var ajaxUrl = 'a/7776/as'; 

var data = { 
    'answer' : { 'user_input' : userInput }, 
    'form_build_id' : 'form-ffe6f10e9601470ed4cfe38257a959a6' 
} 
$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: data, 
    success: function(json){ 
    } 
}); 
0

यदि आप चाहते हैं कि पेलोड में एक सरणी है तो आपको traditional को सत्य पर सेट करने की आवश्यकता है।

$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: data, 
    traditional: true, 
    success: function (json) {} 
}); 
+0

यह केवल मूल्य के रूप में '[ऑब्जेक्ट ऑब्जेक्ट] "' को भेजता है, शायद ही उपयोगी है। –

3

डिफ़ॉल्ट POST एन्कोडिंग multipart/form-dataname=value जोड़े की एक फ्लैट श्रृंखला के होते हैं जो है।

आपकी संरचना को सीधे name=value जोड़े की एक फ्लैट श्रृंखला में मैप नहीं किया जा सकता है, क्योंकि यह जटिल है। आपके पास एक सदस्य है जो एक वस्तु है, जिसमें एक सरणी का जिक्र करने वाली संपत्ति है।

यदि आप एक मनमाने ढंग से जटिल संरचना भेजना चाहते हैं, तो आपको एक अलग एन्कोडिंग का उपयोग करना होगा और यह सुनिश्चित करना होगा कि सर्वर उस एन्कोडिंग को समझता है। उदाहरण के लिए, आप सर्वर पर JSON या XML भेज सकते हैं, लेकिन आपको यह कहना होगा कि विधि ajax विधि पर संपत्ति सेट करके आप क्या कर रहे हैं (जो आपके द्वारा पर भेजे जा रहे डेटा के प्रकार को सेट करता है सर्वर)। फिर आपके सर्वर को यह समझना होगा कि JSON या XML को deserialize कैसे करें।

कुछ हद तक, सुनिश्चित करें कि आपकी संरचना name=value जोड़े की एक फ्लैट श्रृंखला में मैप की जा सकती है।

एक आधे रास्ते घर multipart/form-data के रूप में डेटा भेजने के लिए है, लेकिन में आप किसी एकल name=value जोड़ी भेजने के लिए और राशि value हिस्सा एक अलग एन्कोडिंग, इस तरह:

$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: {json: JSON.stringify(data)}, 
    success: function(json){ 
    } 
}); 

एक भी name=value जोड़ी भेजता है कि json नाम के साथ, जहां मान JSON-encoded स्ट्रिंग है। आपका सर्वर-साइड सामान्य तरीके से json पैरामीटर का मान पुनर्प्राप्त करेगा, और फिर ऑब्जेक्ट ग्राफ़ को फिर से बनाने के लिए JSON deserializer का उपयोग करेगा।

यह आधा रास्ता-घर तकनीक कभी-कभी ढांचे में आसान होती है जो मानक अनुरोध एन्कोडिंग के अलावा किसी अन्य चीज़ का उपयोग करना मुश्किल बनाती है।

1

क्योंकि आप शून्य लंबाई सरणी पोस्ट नहीं कर सकते हैं। पोस्ट (या HTTP क्वेरी) कुंजियों में कोई भी प्रकार की जानकारी नहीं होती है और शून्य लंबाई सरणी प्रभावी रूप से पोस्ट बॉडी में शून्य में बन जाएगी: संदेश = [] '' में क्रमबद्ध होगा।

+1

यह मूल प्रश्न का उत्तर देता है, इसलिए जो भी कम हो जाता है, वह अपने मकसद को प्रबुद्ध करने की उम्मीद करता है। – adrenalin

+0

+1 मूल प्रश्न यह है कि यह क्यों नहीं भेजा जा रहा है, और यह जवाब है। अब यह ओपी की समस्या को हल नहीं करता है, लेकिन यह उन कारकों पर निर्भर करता है जो प्रश्न में शामिल नहीं हैं। इस ज्ञान के साथ, वह कम से कम एक अलग समाधान मिल सकता है। डाउनवोट का एक स्पष्टीकरण यहां बहुत अच्छा होगा ... –

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