Problemas al pasar datos a getJSON () de jquery: no aceptará el mapa

Estoy tratando de serializar mi formulario (JSP/Struts 1.1) y ponerlo en un objeto o mapa o lo que sea que necesite el método .getJSON() de jQuery. Aquí está mi código js:

// 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;
}

Esto da como resultado una java.lang.IllegalArgumentException en el back-end (algo relacionado con el método de servlet BeanUtils.populate).

Si configuro el segundo de los 2 parámetros de mi llamada .getJSON() a algo como esto, funciona bien y los datos aparecen en el objeto de formulario en mi back-end de Java:

// 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);
}

También intenté crear una cadena con la sintaxis adecuada que incluye los datos del formulario y eso da como resultado lo mismo. Puedo tener mi sintaxis incorrecta para eso. En cualquier caso, mi principal problema es que:

1) El método .getJSON() acepta, "Un mapa o cadena que se envía al servidor con la solicitud". como su segundo parámetro (ver http://api.jquery.com/jQuery.getJSON/)

2) Estoy pasando lo que creo que es un "mapa"

3) estoy recibiendo un java.lang.IllegalArgumentException y no sé a dónde ir desde aquí

preguntado el 12 de junio de 12 a las 17:06

Use Firebug u otras herramientas para ver exactamente cómo se ve la solicitud HTTP, o use herramientas de registro en el lado del servidor para hacer eso. -

Exactamente, actualice la pregunta con qué datos json se publicaron y el código del lado del servidor java que está relacionado con el análisis. -

¿Ha intentado simplemente usar el método de "serialización" de jQuery en el formulario en lugar de un objeto? -

He usado el método de serialización en el formulario en lugar de un objeto, sí. Me sale el mismo error en realidad. Puedo intentar empezar a usar FirebugLite. Aquí en el trabajo solo usamos IE. Pero, si hay otras formas de resolverlo, también estoy abierto a esas ideas. -

Tanto su método como el .serialize() y .serializeArray() los métodos deberían funcionar. ¿El problema está en el servidor y no está relacionado con jQuery? -

1 Respuestas

Si desea enviar un formulario al servidor, simplemente puede usar jQuery's publicar por fascículos() OR serializeArray () método.

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

Debería tener los datos devueltos por el método serialize/serializeArray en su bean de formulario si los nombres de los elementos coinciden correctamente.

aquí hay un ejemplo de trabajo del método de serialización (copiado del sitio web de jQuery)

java.lang.IllegalArgumentException from the BeanUtils.populate El método servlet se debe a una discrepancia en el tipo de datos entre los datos enviados y los datos en el bean de formulario.

Respondido el 12 de junio de 12 a las 23:06

Gracias Lobo, tienes razón. Mi formulario de acción tenía un atributo Fecha[] que no podemos hacer. Creo que usamos Fecha en otra parte de nuestra aplicación, por lo que supongo que un formulario de acción lo aceptará, pero una Fecha [] no se puede convertir correctamente a partir de datos serializados normales. habia asumido que el .serialize() método no estaba dando datos en el formato adecuado para .getJSON() porque nunca se alcanzó el punto de interrupción al comienzo de mi clase de acción. - atwoodr

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.