¿Cómo puedo usar JQuery para publicar datos JSON?

Resuelto Jonas asked hace 13 años • 6 respuestas

Me gustaría publicar Json en un servicio web en el mismo servidor. Pero no sé cómo publicar Json usando JQuery. Lo he probado con este código:

$.ajax({
    type: 'POST',
    url: '/form/',
    data: {"name":"jonas"},
    success: function(data) { alert('data: ' + data); },
    contentType: "application/json",
    dataType: 'json'
});

Pero al utilizar este código JQuery los datos no se reciben como Json en el servidor. Estos son los datos esperados en el servidor: {"name":"jonas"}pero usando JQuery el servidor los recibe name=jonas. O en otras palabras, son datos "codificados en URL" y no Json.

¿Hay alguna forma de publicar los datos en formato Json en lugar de datos codificados en URL usando JQuery? ¿O tengo que utilizar una solicitud ajax manual?

Jonas avatar Jun 06 '11 23:06 Jonas
Aceptado

Estás pasando un objeto, no una cadena JSON. Cuando pasas un objeto, jQuery lo utiliza $.parampara serializar el objeto en pares nombre-valor.

Si pasa los datos como una cadena, no se serializarán:

$.ajax({
    type: 'POST',
    url: '/form/',
    data: '{"name":"jonas"}', // or JSON.stringify ({name: 'jonas'}),
    success: function(data) { alert('data: ' + data); },
    contentType: "application/json",
    dataType: 'json'
});
lonesomeday avatar Jun 06 '2011 16:06 lonesomeday

Basándome en la respuesta de lonesomeday, creo un jpostque incluye ciertos parámetros.

$.extend({
    jpost: function(url, body) {
        return $.ajax({
            type: 'POST',
            url: url,
            data: JSON.stringify(body),
            contentType: "application/json",
            dataType: 'json'
        });
    }
});

Uso:

$.jpost('/form/', { name: 'Jonh' }).then(res => {
    console.log(res);
});
ninhjs.dev avatar Dec 20 '2016 14:12 ninhjs.dev

puedes publicar datos usando ajax como:

 $.ajax({
   url: "url", 
   type: "POST",
   dataType: "json",
   contentType: "application/json; charset=utf-8",
   data: JSON.stringify({ name: 'value1', email: 'value2' }),
   success: function (result) {
       // when call is sucessfull
    },
    error: function (err) {
    // check the err for error details
    }
 }); // ajax call closing
Er Mayank avatar May 12 '2021 10:05 Er Mayank