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();



-- 



Reply via email to