¿Cómo puedo usar JQuery para publicar datos JSON?
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?
Estás pasando un objeto, no una cadena JSON. Cuando pasas un objeto, jQuery lo utiliza $.param
para 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'
});
Basándome en la respuesta de lonesomeday, creo un jpost
que 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);
});
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