jquery-migrate icon indicating copy to clipboard operation
jquery-migrate copied to clipboard

Migrate error from within jQuery when using $.serialize with $.ajaxSettings.traditional

Open nvioli opened this issue 6 years ago • 1 comments

My site uses $.ajaxSettings.traditional = true, and we're working on upgrading to jQuery 3 now. The migrate script is showing a warning when I use $('form').serialize() because the implementation within jQuery uses param without checking the value of the traditional flag.

jQuery.fn.extend( {
	serialize: function() {
		return jQuery.param( this.serializeArray() );
	},
	...
})

(from serialize.js line 99-ish)

I was able to fix the warning by replacing $('form').serialize() with $.param( $('form').serializeArray() , $.ajaxSettings.traditional ), but I'm wondering for future users if it wouldn't be helpful to either:

  • Update the migrate documentation to suggest this fix (other programmers might have a hard time understanding what the problem is, since the migrate documentation doesn't reference serialize anywhere; I was confused for a bit before I realized that the offending code was within jQuery), or
  • modify the jQuery source to explicitly use the traditional flag in the serialize implementation:
    Query.fn.extend( {
    serialize: function() {
    	return jQuery.param( this.serializeArray(), jQuery.ajaxSettings.traditional );
    },
    ...
    )
    

Happy to PR if either of those is desirable.

nvioli avatar Jun 25 '19 16:06 nvioli

We can't do the second thing, that would re-introduce the dependency we want to avoid.

What if we filled jQuery.fn.serialize inside Migrate and show a warning if jQuery.ajaxSettings.traditional is true?

dmethvin avatar Jul 02 '19 01:07 dmethvin