2010-03-24 14 views
5

परिवर्तित करता है मेरा कोड JQuery 1.3.2 में ठीक काम करता है, लेकिन 1.4.2 में यह टूटा हुआ प्रतीत होता है।JQuery 1.4.2 में .ajax जेएसओएन गलत

?pks=108;pks=107 

क्या मैं अब मिलता है:

?pks[]=108;pks[]=107; 

मुझे इस कोड के माध्यम से पता लगाने, JSON ऑब्जेक्ट जब तक यह प्रवेश करती है ठीक हो रहा है क्या यह पोस्ट में मिलना चाहिए कुछ इस तरह है। ajax। Firebug, के बाद प्रतिक्रिया मिली है, से पता चलता पोस्ट किया गया था:

Parameters application/x-www-form-urlencoded 
pks[] 108 
pks[] 107 
Source 
pks%5B%5D=108&pks%5B%5D=107 

कौन सा नहीं है कि मैं क्या JQuery 1.3.2 पर मिला है। उन अतिरिक्त ब्रेसिज़ कहां से आ रहे हैं?

+0

आप अपने कोड पोस्ट कर सके हैं। –

+0

आपकी स्रोत लाइन गलत है, जहां ब्रैकेट आते हैं। आप वेबसाइवर से वास्तव में क्या लौटाए जा रहे हैं यह देखने के लिए फिडलर जैसे कुछ का उपयोग करना चाह सकते हैं। –

+0

जैसा कि यह पता चला है कि जब मैंने jQuery 1.3.2 से 1.4.2 तक अपग्रेड किया था तो मेरे पास कुछ भी गलत नहीं था। ऐसा लगता है कि jQuery ने अपना व्यवहार बदल दिया है, नीचे जवाब देखें। – cnobile

उत्तर

8

नेस्टेड पैरा सीरियलाइजेशन के लिए JQuery 1.4 released a change। उनकी साइट से:

jQuery 1.4 jQuery द्वारा लोकप्रिय दृष्टिकोण का उपयोग करके jQuery.param में नेस्टेड पैरा पैरालाइजेशन के लिए समर्थन जोड़ता है, और रूबी ऑन रेल द्वारा समर्थित है। उदाहरण के लिए, {foo: ["bar", "baz"]} को "foo [] = bar & foo [] = baz" के रूप में क्रमबद्ध किया जाएगा।

jQuery 1.3 में, {foo: ["bar", "baz"]} को "foo = bar & foo = baz" के रूप में क्रमबद्ध किया गया था। हालांकि, इस दृष्टिकोण का उपयोग करके एकल तत्व एरे को एन्कोड करने का कोई तरीका नहीं था। यदि आपको पुराने व्यवहार की ज़रूरत है, तो आप इसे पारंपरिक अजाक्स सेटिंग (वैश्विक स्तर पर jQuery.ajaxSettings.traditional या पारंपरिक ध्वज के माध्यम से केस-दर-मामले आधार पर) सेट करके इसे चालू कर सकते हैं।

[] कोष्ठक सामान्य रूप से एक सरणी इंगित करने के लिए उपयोग किया जाता है, और यह है कि क्या वे यहाँ मुझे लगता है कि (के रूप में आपकी क्वेरी स्ट्रिंग को देखने के लिए है कि एक मूल्य ओवरराइट किया जा रहा है पढ़ा जा सकता है और अधिक स्पष्ट करने की कोशिश कर रहे हैं प्रतीत होता है दूसरे द्वारा)।

संपादित: मुझे लगता है कि आप शायद उपयोग करने के लिए अपने सुझाव का पालन कर सकता है या तो:

// Globally set it to use the old 1.3.* way of doing things. 
jQuery.ajaxSettings.traditional = true; 

// Enables the 1.3.* way for a single Ajax request only 
$.ajax({ data: stuff, traditional: true }); 
+1

दिलचस्प, मुझे नहीं पता था कि यह कैसे किया जा रहा था में बदलाव आया था। ('पीकेएस []') बजाय request.POST.get: मैं आसानी से की तलाश द्वारा मेरे Django कोड में समस्या का समाधान कर सकते हैं request.POST.get ('पीकेएस')। Django मुझे सूची ठीक से देता है। इस परिवर्तन के साथ मुझे एकमात्र मुद्दा यह है कि फ्रेमवर्क कोड अब इस मामले में जावास्क्रिप्ट टूलकिट, JQuery के idiosyncratic व्यवहार पर निर्भर है। – cnobile