diff options
author | Joe Trumbull <trumbull.j@gmail.com> | 2016-03-17 10:06:11 -0400 |
---|---|---|
committer | Richard Gibson <richard.gibson@gmail.com> | 2016-04-05 10:38:56 -0400 |
commit | 9fdbdd393a0f0ebdcd837cf102878c8b45860c3b (patch) | |
tree | d6421e5d6aba3a3c4143a4e735bc6232a8f882a8 | |
parent | 5d20a3c3f10bda935c8370392a25e45719afa6b9 (diff) | |
download | jquery-9fdbdd393a0f0ebdcd837cf102878c8b45860c3b.tar.gz jquery-9fdbdd393a0f0ebdcd837cf102878c8b45860c3b.zip |
Serialize: Treat literal and function-returned null/undefined the same
Fixes gh-3005
Closes gh-3007
-rw-r--r-- | src/serialize.js | 5 | ||||
-rw-r--r-- | test/unit/serialize.js | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/serialize.js b/src/serialize.js index a0b948460..9a735fec1 100644 --- a/src/serialize.js +++ b/src/serialize.js @@ -58,7 +58,10 @@ jQuery.param = function( a, traditional ) { add = function( key, value ) { // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + value = jQuery.isFunction( value ) ? value() : value; + if ( value == null ) { + value = ""; + } s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); }; diff --git a/test/unit/serialize.js b/test/unit/serialize.js index 65d94171c..b87a0aa85 100644 --- a/test/unit/serialize.js +++ b/test/unit/serialize.js @@ -1,7 +1,7 @@ QUnit.module( "serialize", { teardown: moduleTeardown } ); QUnit.test( "jQuery.param()", function( assert ) { - assert.expect( 23 ); + assert.expect( 24 ); var params, settings; @@ -74,6 +74,9 @@ QUnit.test( "jQuery.param()", function( assert ) { params = { "param1": null }; assert.equal( jQuery.param( params, false ), "param1=", "Make sure that null params aren't traversed." ); + params = { "param1": function() {}, "param2": function() { return null; } }; + assert.equal( jQuery.param( params, false ), "param1=¶m2=", "object with function property that returns null value" ); + params = { "test": { "length": 3, "foo": "bar" } }; assert.equal( jQuery.param( params, false ), "test%5Blength%5D=3&test%5Bfoo%5D=bar", "Sub-object with a length property" ); |