I ran into the same bug as well. The patch would work unless the attribute itself has quotes in it, which would need to be escaped: http://stackoverflow.com/questions/4015345/how-to-properly-escape-quotes-inside-html-attributes
On Thursday, June 21, 2012 11:50:34 AM UTC-7, Thomas Le wrote: > > Hey guys, > > I found a small bug in the ajax function when you pass in field input > names like "field[location]" or "blog[id]". > > So, if I have a form that looks like: > > <input type="text" name="query" value=""> > <label class="control-label" for="searchSource">Search Source:</label> > <select type="text" name="searchSource"> > <option value="resumes" selected="selected">Resumes</option> > <option value="openWeb">Open Web</option> > </select> > <label class="control-label" for="location">Location:</label> > <input type="text" name="field[location]" value=""> > <label class="control-label" for="experience">Experience:</label> > <input type="text" name="field[experience]" value=""> > <label class="control-label" for="education">Education:</label> > <input type="text" name="field[education]" value=""> > > And I pass all the input field names through ajax(u, t, s) in an array to > parameter t: > > var t = [ 'query', 'searchSource', 'field[location]', 'field[experience]' > ]; > > This function fails to execute (located in app_name/static/js/web2py.js) > > function ajax(u,s,t) { > query = ''; > if (typeof s == "string") { > d = jQuery(s).serialize(); > if(d){ query = d; } > } else { > pcs = []; > if (s != null && s != undefined) for(i=0; i<s.length; i++) { > q = jQuery("[name="+s[i]+"]").serialize(); > if(q){pcs.push(q);} > } > if (pcs.length>0){query = pcs.join("&");} > } > jQuery.ajax({type: "POST", url: u, data: query, success: function(msg) > { if(t) { if(t==':eval') eval(msg); else if(typeof t=='string') > jQuery("#"+t).html(msg); else t(msg); } } }); > } > > More specifically, this line: > > q = jQuery("[name="+s[i]+"]").serialize(); > > To fix, add single quotes around s[i], like this: > > q = jQuery("[name='"+s[i]+"']").serialize(); > > > > --