简体   繁体   中英

Problems passing data to jquery's getJSON() - Will not accept map

I am trying to serialize my form (JSP/Struts 1.1) and put it into an object or map or whatever jQuery's .getJSON() method needs. Here is my js code:

// This function makes an AJAX call, passing the entire form to the Action class
function ajaxCallWithForm(inputURL, formName, onReturnFunction)
{
    var formAsMap = serializeForm(formName);     
    $.getJSON(inputURL, formAsMap, onReturnFunction);
}

function serializeForm(formName)
{
    var obj = {};
    var a = $('#'+formName).serializeArray();

    $.each(a, function() {
        if (obj[this.name] !== undefined) {
            if (!obj[this.name].push) {
                obj[this.name] = [obj[this.name]];
            }
            obj[this.name].push(this.value || '');
        } else {
            obj[this.name] = this.value || '';
        }
    });

    return obj;
}

This results in a java.lang.IllegalArgumentException on the back end (something to do with the BeanUtils.populate servlet method).

If I set the 2nd of 3 parameters of my .getJSON() call to something like this, it works fine and the data shows up in the form object in my Java back end:

// This function makes an AJAX call, passing the entire form to the Action class
function ajaxCallWithForm(inputURL, formName, onReturnFunction)
{
    $.getJSON(inputURL, {"vehicleKeyNum":12345,
                         "vehicleID":"12345",
                         "rand":Math.random()}, 
        onReturnFunction);
}

I have also tried creating a string with the proper syntax that includes the data from the form and that results in the same thing. I may have my syntax wrong for that. At any rate, my main problem is that:

1) The .getJSON() method accepts, "A map or string that is sent to the server with the request." as its 2nd parameter (see http://api.jquery.com/jQuery.getJSON/ )

2) I am passing what I think is a "map"

3) I am getting a java.lang.IllegalArgumentException and don't know where to go from here

If you want to submit a form to server, you can simply use jQuery's serialize() OR serializeArray() method.

$.getJSON(inputURL, $(formName).serialize(), onReturnFunction); 

You should have the data returned by the serialize/serializeArray method populated in your form bean if the element names are matched right.

here is a working example of serialize method (copied from jQuery website)

java.lang.IllegalArgumentException from the BeanUtils.populate servlet method is due to data type mismatch between the data submitted and the data on the form bean.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM