jQuery publicar json válido en el cuerpo de la solicitud


Así que de acuerdo con jQuery Ajax docs, serializa los datos en forma de una cadena de consulta al enviar solicitudes, pero la configuración processData:false debería permitirme enviar JSON real en el cuerpo. Desafortunadamente estoy teniendo dificultades para determinar primero, si esto está sucediendo y segundo cómo se ve el objeto que se está enviando al servidor. Todo lo que sé es que el servidor no está analizando lo que estoy enviando.

Cuando se utiliza http client para publicar un objeto literal {someKey:'someData'}, funciona. Pero cuando se utiliza jQuery con data: {someKey:'someData'}, se produce un error. Desafortunadamente, cuando analizo la solicitud en Safari, dice que la carga útil del mensaje es [object Object]... gran... y en Firefox el post está en blanco...

Al registrar el contenido del cuerpo en el lado Java, literalmente obtiene [object Object] entonces, ¿cómo se envían datos JSON REALES??

¿Alguien ha tenido experiencia con un servicio Java serializando datos JSON en el cuerpo de la solicitud, con la solicitud enviada desde jQuery?

Por cierto, aquí está el $completo.solicitud ajax:

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});
Author: Adam Zerner, 2010-11-12

1 answers

Una solicitud JSON real se vería así:

data: '{"command":"on"}',

Donde estás enviando una cadena JSON real. Para una solución más general, utilice JSON.stringify() para serializar un objeto a JSON, así:

data: JSON.stringify({ "command": "on" }),

Para admitir navegadores antiguos que no tienen el objeto JSON, use json2.js que lo añadirá.


Lo que está sucediendo actualmente es que ya que tienes processData: false, básicamente está enviando esto: ({"command":"on"}).toString() que es [object Object]...lo que ves en tu petición.

 226
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-11 22:06:00