From 54bd004e53b4d89e9e7e7533f11c23ff99f70d73 Mon Sep 17 00:00:00 2001 From: jeresig Date: Fri, 5 Feb 2010 19:43:31 -0500 Subject: [PATCH] Make sure that we don't try to double-encode params using the traditional style. Fixes #6041. --- src/ajax.js | 2 +- test/unit/ajax.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index d0c6752..f514cae 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -624,7 +624,7 @@ jQuery.extend({ // If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. for ( var prefix in a ) { - buildParams( prefix, a[prefix] ); + buildParams( traditional ? prefix : prefix.replace(/[\[\]]/g, ""), a[prefix] ); } } diff --git a/test/unit/ajax.js b/test/unit/ajax.js index f6809d5..4a823ac 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -351,9 +351,9 @@ test("serialize()", function() { }); test("jQuery.param()", function() { - expect(18); + expect(19); - equals( !jQuery.ajaxSettings.traditional, true, "traditional flag, falsy by default" ); + equals( !jQuery.ajaxSettings.traditional, true, "traditional flag, falsy by default" ); var params = {foo:"bar", baz:42, quux:"All your base are belong to us"}; equals( jQuery.param(params), "foo=bar&baz=42&quux=All+your+base+are+belong+to+us", "simple" ); @@ -378,6 +378,8 @@ test("jQuery.param()", function() { params = { a:[1,2], b:{ c:3, d:[4,5], e:{ x:[6], y:7, z:[8,9] }, f:true, g:false, h:undefined }, i:[10,11], j:true, k:false, l:[undefined,0], m:"cowboy hat?" }; equals( jQuery.param(params,true), "a=1&a=2&b=%5Bobject+Object%5D&i=10&i=11&j=true&k=false&l=undefined&l=0&m=cowboy+hat%3F", "huge structure, forced traditional" ); + + equals( decodeURIComponent( jQuery.param({ "test[]": [0, 1, 2] }) ), "test[]=0&test[]=1&test[]=2", "Make sure params are double-encoded." ); jQuery.ajaxSetup({ traditional: true }); -- 1.7.10.4