I have a problem with jQuery.param function. jQuery uses + instead of% 20 for URL coding spaces.
var obje = { 'test': 'tester 2' } console.log($.param(obje));
returns "test = tester + 2"
so I thought about overriding this main function:
(function($){ $.fn.param = function( a, traditional ) { console.log('custom $.param'); var s = [], add = function( key, value ) { // If value is a function, invoke it and return its value value = jQuery.isFunction( value ) ? value() : value; s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); }; // Set traditional to true for jQuery <= 1.3.2 behavior. if ( traditional === undefined ) { traditional = jQuery.ajaxSettings.traditional; } // If an array was passed in, assume that it is an array of form elements. if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); } ); } else { // 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 ], traditional, add ); } } return s.join("&"); // Return the resulting serialization //return s.join( "&" ).replace( r20, "+" ); }; })(jQuery); var obje = { 'test': 'tester 2' } console.log($.param(obje));
However, this fails. $ .param is not overridden.
Any idea what could be wrong?
Thanks!
Edit: my solution (because I'm a new user, I apparently can't answer my question after 8 hours (why?))
With the ThiefMaster solution, I still had a problem that buildParams is undefined. I solved this by calling the old function and then replacing + back with% 20
// modification of the jQuery.param function: spaces are encoded by jQuery.param with + instead of %20. replace these back to %20 (function($, oldFunction){ $.param = function( a, traditional ) { var s = oldFunction.apply(oldFunction,[a,traditional]); // Return the resulting serialization return s.replace( '+', '%20' ); }; })(jQuery,jQuery.param);
javascript jquery
Chielus
source share