Both jQuery 1.3.2 and 1.4 urlencode the name and value parts, which shouldn't cause any problems.
jquery.ajaxSettings.traditional is undefined by default, but since we only test its value in a "truthy" way, it shouldn't matter whether it defaults to false or undefined. Defaulting to undefined safes a few bytes. That being said, maybe the $.serialize() method also needs a `traditional` flag. I personally think that progressive enhancement patterns should always be used, such that form elements in the page should have their name encoded as the server expects (so that a default non-JavaScript or non-AJAX submit works normally). This way, the names of form "array" elements submitted to PHP should end in [], and the form should usually be serialized in the `traditional` way. Comments? - Ben On Jan 14, 10:52 am, Tobias Hoffmann <smilingt...@googlemail.com> wrote: > On Thu, Jan 14, 2010 at 3:39 PM, John Resig <jere...@gmail.com> wrote: > > You can just use the traditional style of serialization. Just set: > > jQuery.ajaxSettings.traditional = true; > > --- Part 1 --- > The Subject says jQuery 1.3.2 ; But the serialization changes with the > upcoming 1.4. > There(1.4) you'll get the old(1.3.2) behavior by setting .traditional = > true. > See also here: > > http://groups.google.com/group/jquery-dev/browse_thread/thread/9e11a4... > > BUT this does not change the quoting (urlencoding) behavior of > $('#form1').serialize(), only certain aspects of the $.param() function(?) > -- which is used for serializing javascript objects. > > With decodeURIComponent($('...').serialize()) you will get the raw brackets. > But for POST or GET this is not necessary, as the urlencoding will be > stripped server-side before any further processing, so what PHP/... > shouldn't see any difference between a url-encoded request (for > completeness: there a some subtleties for URL parts before and including the > '?' for GETs, AFAIK) and one without encoding (when possible/allowed for the > characters). So jQuery should not cause any problems here. > > BTW I tried with PHP and the print_r() output seemed wrong (included the > brackets) at first. var_dump() differentiates formatting from contents > better. > > --- Part 2 --- > @John, Ben: I expected > jquery.ajaxSettings.traditional === false > by default. But it isn't (in 1.4rc1), its undefined. Also in > > http://github.com/cowboy/jquery/commit/4ea851e08841447ba3550dc54785b3... > the test case says in Line 263 > equals( !jQuery.ajaxSettings.traditional, true, "traditional flag, falsy > by default" ); > but !undefined is also true. Note that in Line 175 of src/ajax.js the > traditional: false, > appears only inside a comment. > > This looks like a bug. > > Tobias > > > > On Thu, Jan 14, 2010 at 3:03 AM, Ishbir <ishbi...@gmail.com> wrote: > > > How to replicate the problem- > > > > 1. Create a form with an input field, the name of which includes > > > [ and ]. For e.g. Shout[message]. > > > 2. Try to serialize the form and display the value using the > > > javascript alert function. The square brackets of the name attribute > > > will be html encoded however that behavior is not desired since the > > > name should not change while the value of the text field should be > > > html encoded. > > > > A workaround- > > > > Use a separate function to replace the html codes of the square > > > brackets back to the original brackets. > > > > Please fix this problem in the next version. :)
-- You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-...@googlegroups.com. To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en.