2010-07-16 15 views
15

मैं वर्तमान में निम्नलिखित जावास्क्रिप्ट सरणी है:AJAX कॉल के दौरान जेएस वैरिएबल नाम के अंत में स्क्वायर ब्रैकेट को कैसे हटाया जाए?

var data = { 
    'stuffs': stuffs 
}; 

$(".output").load("/my-server-code/", data, function() { 
}); 

सर्वर साइड पर, अगर मैं request.POST की सामग्री मुद्रित (मैं:

var stuffs = ['a', 'b']; 

मैं का उपयोग कर jQuery के load सर्वर कोड के लिए ऊपर से गुजरती हैं 'वर्तमान में Django) का उपयोग हूँ, मुझे मिलता है:

'stuffs[]': [u'a', u'b'] 

सूचना [] वरी पर परिवर्तनीय नाम का ix stuffs। सर्वर कोड तक पहुंचने से पहले [] को निकालने का कोई तरीका है?

उत्तर

31

इस डिफ़ॉल्ट व्यवहार in jQuery 1.4+ है ... अगर आप पोस्ट &stuffs=a&stuffs=b बजाय &stuffs[]=a&stuffs[]=b होने के लिए आप इस तरह, traditional optiontrue को स्थापित करना चाहिए हैं:

$.ajaxSetup({traditional: true}); 

नोट इस सभी अनुरोधों को प्रभावित करता है ... जो आम तौर पर आप इस मामले में क्या चाहते हैं। यदि आप प्रति-अनुरोध होना चाहते हैं तो आपको अब $.ajax() कॉल का उपयोग करना चाहिए और traditional: true सेट करना चाहिए। You can find more info about traditional in the $.param() documentation

+4

1.10 $ .ajaxSettings को कॉल करने योग्य नहीं है - $ .ajaxSetup का उपयोग इसके बजाय किया जाना चाहिए - इसका उपयोग ऊपर जैसा ही है। –

-3

[] इंगित करता है कि चर एक सरणी है। मुझे कल्पना है कि [] को आपके परिवर्तनीय नाम में जोड़ना पाइथन/Django का तरीका आपको यह बताने का तरीका है। आप शायद अपने स्वयं के प्रिंट फ़ंक्शन को कार्यान्वित कर सकते हैं जो उन्हें नहीं दिखाता है।

+0

क्या इसका मतलब यह है कि [] जावास्क्रिप्ट के बजाय Django से आ रहा है? –

-1

जब कोई सरणी किसी फॉर्म या AJAX के माध्यम से किसी GET अनुरोध का उपयोग करके सबमिट की जाती है, तो प्रत्येक तत्व को सरणी का नाम दिया जाता है, उसके बाद वैकल्पिक रूप से खाली वर्ग ब्रैकेट की एक जोड़ी होती है। तो jQuery यूआरएल http://example.com/get.php?stuff[]=a&stuff[]=b उत्पन्न कर रहा है। सरणी सबमिट करने का यही एकमात्र तरीका है, और जावास्क्रिप्ट मानक का पालन कर रहा है।

POST अनुरोध ठीक उसी तरह से काम करते हैं (जब तक कि जेसन को एक लंबे जेसन स्ट्रिंग के रूप में नहीं भेजा जाता)।

PHP में, इसे मूल सरणी में वापस पार्स किया गया है, इसलिए क्वेरी स्ट्रिंग थोड़ा अजीब हो सकती है, डेटा को प्राप्त होने के बाद प्राप्त किया जाता है। $_GET['stuff'][0] PHP में सही तरीके से काम करता है।

मुझे यकीन नहीं है कि Django क्वेरी स्ट्रिंग्स को कैसे पार्स करता है।

+1

"यह एक सरणी सबमिट करने का एकमात्र तरीका है, और जावास्क्रिप्ट मानक का पालन कर रहा है।" - यह * मानक नहीं है लेकिन रेल/PHP सम्मेलन है। Arrays पूरी तरह से कानूनी रूप से foo = 1 और foo = 2 के रूप में भेजा जा सकता है। – jholster

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