]> source.dussan.org Git - jquery.git/commitdiff
Serialize: Treat literal and function-returned null/undefined the same
authorJoe Trumbull <trumbull.j@gmail.com>
Thu, 17 Mar 2016 14:06:11 +0000 (10:06 -0400)
committerRichard Gibson <richard.gibson@gmail.com>
Tue, 5 Apr 2016 14:38:56 +0000 (10:38 -0400)
Fixes gh-3005

Closes gh-3007

src/serialize.js
test/unit/serialize.js

index a0b948460699a535d8e879470611e2ef3c5dbad3..9a735fec18c730afbf3ea39f816e612ae1ac73eb 100644 (file)
@@ -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 );
                };
 
index 65d94171ca259c6c0605b4044c41431015d9d822..b87a0aa8582f2a85008b6049ef95c7dc8e2c1184 100644 (file)
@@ -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=&param2=", "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" );