From: Joe Trumbull Date: Thu, 17 Mar 2016 14:06:11 +0000 (-0400) Subject: Serialize: Treat literal and function-returned null/undefined the same X-Git-Tag: 3.0.0-rc1~45 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9fdbdd393a0f0ebdcd837cf102878c8b45860c3b;p=jquery.git Serialize: Treat literal and function-returned null/undefined the same Fixes gh-3005 Closes gh-3007 --- 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" );